在 C++11 中,如何声明一个将 lambda 表达式作为参数的函数?我可以在网上找到大量用于声明 lambda 或将它们作为模板参数的资源,但我真正想做的是能够将 lambda 用作易于声明的回调处理程序,类似于通过闭包实现的功能在 JavaScript 和 Objective-C 中的代码块中。
本质上,我想用 lambda 替换的经典 C++ 构造类似于:
class MyCallback {
public:
virtual ~MyCallback() {}
virtual void operator(int arg) = 0;
};
void registerCallback(const std::shared_ptr<MyCallback> &);
void foo(void) {
int a, b, c;
class LocalCallback: public MyCallback {
int a, b, c;
public:
LocalCallback(int a, int b, int c): a(a), b(b), c(c) {}
void operator(int arg) { std::cout << (a+b+c)*arg << std::endl; }
};
registerCallback(std::shared_ptr<MyCallback>(new LocalCallback(a,b,c)));
}
这将被简化为:
void registerCallback(/* WHAT GOES HERE? */);
void foo(void) {
int a, b, c;
registerCallback([=](int arg){std::cout << (a+b+c)*arg << std::endl; })
}
那么,我写了/* WHAT GOES HERE? */
什么?
编辑:这是为了存储回调以便稍后回调,而不是立即使用和调用它。