我已经阅读了“Effective Modern C ++”的第31项和http://en.cppreference.com/w/cpp/language/lambda的网页,并想知道我是否可以通过其明确的类型而不是包装类型的std :: function或{{}的关键字来定义lambda。 1}}我怎样才能做到这一点。
例如,类型auto
:
int
现在,当问题来到lambda时:
auto x_1 = 5; // type deduction
int x_2 = 5; // defined by definite type
// both x_1, x_2 are int variables of value 5
答案 0 :(得分:1)
标准说lambda的类型是 unnamed 所以实现创建了一个实现定义的名称,它使用类似于其他未命名的类,结构enumc等。
ISO C ++:5.1.2 Lambda表达式[expr.prim.lambda]
3 lambda表达式的类型(也是闭包对象的类型)是一个唯一的,未命名的非联合类类型 - 称为闭包类型 - 其属性如下所述
该标准还说,lambda'表现得像一个功能'所以你可以使用std::function
模板:
[注意:闭包对象的行为类似于函数对象(20.9).- end note]
答案 1 :(得分:1)
在某些情况下,您可以使用函数指针(使用 mvcpp,0x17):
auto usingAuto = []() {
cout << "autoMagick" << endl;
};
void(*pureCpp)() = []() {
cout << "pureCpp" << endl;
};
//pureCpp = usingAuto; //you can even assing function pointers from lambdas
//usingAuto = pureCpp; //error
pureCpp();
usingAuto();