lea*_*vst 9 c++ lambda function decltype c++11
这有效......
auto x = 4;
typedef decltype(x) x_t;
x_t y = 5;
Run Code Online (Sandbox Code Playgroud)
......为什么不呢?
int j = 4;
auto func = [&] (int i) { cout << "Hello: i=" << i << " j=" << j << endl;};
typedef decltype(func) lambda_t;
lambda_t func2 = [&] (int i) { cout << "Bye: i=" << i << " j=" << j << endl;};
Run Code Online (Sandbox Code Playgroud)
...我将如何lambda_t使用std :: function手动声明?
R. *_*des 14
...那为什么不这[工作]?
因为lambda的每个词法实例都有不同的类型.如果使用相同的字符则无关紧要.
..以及如何使用std :: function手动声明lambda_t?
lambda采用int参数,不返回任何内容......因此:
typedef std::function<void(int)> lambda_t;
Run Code Online (Sandbox Code Playgroud)
LAMBDA类型是难言的(不能被命名),这是你不能做你的要求的原因.除此之外,每个lambda都是不同的类型,所以即使你可以命名类型,你也无法将第二个lambda分配给第一个lambda.如果您认为lambda语法是一个更清晰的函数对象的快捷方式:成员operator()每个lambda都是不同的,因此它们的类型不同.
另一方面,您可以将lambda分配给std::function<>相应签名的对象,在您的情况下也是如此std::function<void(int)>.