最佳答案
除了函数指针之外,您还可以使用 std::function and std::bind (如果您没有 C++11,则使用 boost
等效项)。它们提供了多态函数包装器,因此您可以执行诸如定义此函数之类的操作,该函数采用一个 std::function ,该函数采用两个 int 并返回一个 double :
double foo(std::function<double(int, int)> f) {
return 100*f(5,89);
}
然后你可以向它传递任何与该签名匹配的内容,例如:
struct Adder {
double bar(double a, double b) { return a+b;}
};
int main() {
using namespace std::placeholders;
Adder addObj;
auto fun = std::bind(&AdderC::bar, &addObj, _1, _2); // auto is std::function<double(int,int)>
std::cout << foo(fun) << "\n"; // gets 100*addObj.bar(5,89)
}
这些都是易于使用且功能强大的,不要被无用的例子误导。您可以包装普通函数、静态函数、成员函数、静态成员函数、仿函数...
关于c++ - 如何将函数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322584/