c ++将数据源函数作为参数传递

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()传递:

  • 数据库包装类中的一个非静态函数
  • 型的相同的对象内的函数EcreateEP()(对于"再创造"具有不同参数),其需要访问元素的字段,因此可以不是静态的,无论是.

以某种方式可以将非静态函数作为参数传递给静态函数吗?

如果没有,那么最优雅的替代方案是什么?我不想复制整个代码createEP().

Nat*_*ica 6

你可以使用的是一个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)