Nik*_*las 3 c++ static function non-static c++11
我有一个静态功能:
void E::createEP(std::list<double>* ret, double length, double (*getHeight)(double)) {
// magic
double sampleIntervall = //from magic
double dist = 0;
while (length - dist > -0.1) {
ret->push_back(dist, (*getHeight)(dist));
dist += sampleIntervall;
}
}
Run Code Online (Sandbox Code Playgroud)
在不同的调用中,我有两个不同的函数作为getHeight()传递:
E为createEP()(对于"再创造"具有不同参数),其需要访问元素的字段,因此可以不是静态的,无论是.以某种方式可以将非静态函数作为参数传递给静态函数吗?
如果没有,那么最优雅的替代方案是什么?我不想复制整个代码createEP().
你可以使用的是一个std::function.它将一个可调用的类型包装成一个函数,成员函数,一个带有重载函数运算符的对象.您只需提供要使用的签名即可.所以在你的情况下,你会有
void E::createEP(std::list<double>* ret, double length, std::function<double(double)> getHeight)
Run Code Online (Sandbox Code Playgroud)
然后绑定与该对象的成员函数要调用它,你可以使用拉姆达像
[&](double val){ return object.FunctionName(val); }
Run Code Online (Sandbox Code Playgroud)
或者std::bind喜欢
std::bind(&ClassName::FunctionName, &object)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |