如何修复下面的代码来存储lambda,以便我以后可以调用它?
我目前得到的错误是字段'm_callback'具有不完整的类型.
class Foo
{
public:
Foo() { }
~Foo() { }
template< typename FuncT >
void setCallback( FuncT&& callback )
{
m_callback = callback;
}
private:
auto m_callback; // this line is broken
};
Run Code Online (Sandbox Code Playgroud)
int main(int argc, char** argv)
{
Foo foo;
foo.setCallback( [] (int x){ return true; } );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将auto不能使用关键字喜欢这样.我推荐使用这样的东西:
#include <functional>
std::function<bool (int)> m_callback;
Run Code Online (Sandbox Code Playgroud)
这是从Visual Studio 2010完成的.
该auto关键字只能与初始化表达式一起使用.
所以...这有效:
auto callback = [](int x){ return x == 0; };
Run Code Online (Sandbox Code Playgroud)
......但这不是:
auto callback;
callback = [](int x){ return x == 0; };
Run Code Online (Sandbox Code Playgroud)
我建议您使用类似于function特定签名的内容来表示回调.