c++ - 如何将函数作为参数传递?

标签 c++ function parameters

Possible Duplicate:
How do function pointers work?

如何将函数作为参数传递?

您还可以将另一个类的函数作为参数传递(使用对象吗?)?

最佳答案

除了函数指针之外,您还可以使用 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/

相关文章:

windows - 如果脚本具有强制参数,则 Powershell 调用函数

c++ - 为什么这个程序没有收到预期的 UDP 数据包?

c++ - 实时视频缓冲区访问网络摄像头,Windows Phone 8.1 C++

javascript - 将包含在对象内部的参数传递给函数是个坏主意吗?

angular - 类型 'number' 的参数不可分配给类型 'string' 的形参

sql-server - SSIS 查找转换错误 : The EXECUTE permission was denied on the object 'sp_describe_undeclared_parameters'

c++ - sprintf 精确类型转换导致编译警告

c++ - 编写另一个以 LPCTSTR 开头的文本行的最佳方法是什么?

Javascript 函数抛出错误

arrays - TypeScript 函数数组