在不使用 auto 或模板的情况下声明lambda变量或函数参数的符号是什么?有什么办法吗?或者编译器是否为编译器为程序员未知的每个lambda定义了一个唯一的类对象?如果是,为什么?不能只是作为某种函数指针传递?
What's the notation for declaring a lambda variable, or function parameter, without the use of auto or templates? Is there any way to do so? Or does the compiler define a unique class object for each lambda whose name is unknown to the programmer before compile time? If so, why? Can't they just be passed as some sort of function pointer? It would be a major disappointment if that were not possible.
推荐答案Lambdas可能持有状态(如从周围环境捕获的引用) ;如果它们不存在,它们可以存储在函数指针中。如果他们这样做,他们必须存储为一个函数对象(因为没有在函数指针中保存状态)。
Lambdas may hold state (like captured references from the surrounding context); if they don't, they can be stored in a function pointer. If they do, they have to be stored as a function object (because there is no where to keep state in a function pointer).
// No state, can be a function pointer: int (*func_pointer) (int) = [](int a) { return a; }; // One with state: int b = 3; std::function<int (int)> func_obj = [&](int a) { return a*b; };更多推荐
Lambda作为函数参数
发布评论