c++ - 传递一个函数(具有可变数量的参数!)作为参数

标签 c++ arguments function-pointers argument-passing

我有一个 bisectionMethod 函数,它接受一个函数作为它的参数之一。对于 bisectionMethod 的意图和目的,它接受的函数参数只有一个正在优化的参数。但是,我想将任何类型的函数(带有任意数量的参数)传递给 bisectionMethod 函数。我在 bisectionMethod 函数中使用指针函数作为参数,但它要求我准确指定有多少参数进入该指针函数。最好的解决方法是什么?

例如,我正在尝试做这样的事情:

double bisectionMethod(double xMinimum, double xMaximum, double maxError, double (*rootFunc)(double))
{
    ...
    return ret;
}

double foo1(double x1, double y1){return x1 * y1;}
double foo2(double x2, double y2, double z2){return x2 * y2 * z2;}

int main(){

// I want to first be able to set y1 in foo1.
// Then I want to solve for x1
bisectionMethod(5, 250, 0.1, foo1(x1));

// I want to also be able to use bisectionMethod with foo2
// I want to first be able to set x1, and y1 in foo2.
// Then I want to solve for z1
bisectionMethod(5, 250, 0.1, foo1(z1));

return 0;

}

我希望这个例子有意义。我知道这有点奇怪。任何帮助,将不胜感激。谢谢!

最佳答案

#include <functional>
using namespace std;
using namespace std::placeholders;

double bisectionMethod(double xMinimum, double xMaximum, double maxError, function<double (double)>)
{
   ...   
   return ret;
}

double foo1(double x1, double y1){return x1 * y1;}
double foo2(double x2, double y2, double z2){return x2 * y2 * z2;}

int main(){

// I want to first be able to set y1 in foo1.
// Then I want to solve for x1
bisectionMethod(5, 250, 0.1, std::bind(foo1, _1, 1.0));

// I want to also be able to use bisectionMethod with foo2
// I want to first be able to set x1, and y1 in foo2.
// Then I want to solve for z1
bisectionMethod(5, 250, 0.1, std::bind(foo2, _1, 1.0, 2.0));

return 0;

}

这适用于 C++ 11。对 C++ 98 使用 boost::bind。

关于c++ - 传递一个函数(具有可变数量的参数!)作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21694346/

相关文章:

c++ - 如何在其他部件旋转时阻止物体旋转?

c++ - 在 Xcode 中使用 boost 库编译项目时出错

javascript - 创建对具有使用相同范围的参数的方法的引用 - 在 Javascript 中

c - 函数参数

c++ - 获取 boost::hana::partial::operator() 的地址

c++ - 指向函数成员的指针

c++ - 找不到运行时检查失败的根源 #2

c++ - FPU 命令 FLDL 将 ST0 中的 double 转换为 long double

scala - 如何定义接受参数并返回值的函数 def?

javascript - 将函数参数映射到变量(如果存在)