Lambda作为函数参数

声明一个lambdavariables或函数参数,而不使用auto或模板的符号是什么? 有没有办法做到这一点? 或者编译器在编译之前为程序员未知的每个lambda定义一个唯一的类对象? 如果是这样,为什么? 他们不能只是作为某种函数指针传递? 如果这是不可能的,这将是一个主要的失望。

兰巴达斯可能持有状态(如从周围环境中捕获的参考); 如果他们不,他们可以存储在一个函数指针。 如果他们这样做,他们必须被存储为一个函数对象(因为没有在哪里保持一个函数指针的状态)。

 // 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; }; 

你可以为函数对象使用多态包装器 。 例如:

 #include <functional> std::function<double (double, double)> f = [](double a, double b) { return a*b };