Lambda作为函数参数

sla*_*ast 59 c++ lambda c++11

在不使用auto或模板的情况下声明lambda变量或函数参数的符号是​​什么?有没有办法这样做?或者编译器是否为每个lambda定义一个唯一的类对象,其编程时间之前程序员的名称是未知的?如果是这样,为什么?它们不能仅作为某种函数指针传递吗?如果不可能,那将是一个很大的失望.

Tod*_*ner 56

Lambdas可以保持状态(就像周围环境中捕获的引用一样); 如果他们不这样做,他们可以存储在一个函数指针中.如果它们这样做,则必须将它们存储为函数对象(因为没有在函数指针中保持状态的位置).

// 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; };
Run Code Online (Sandbox Code Playgroud)

  • 实际上字符串文字是一个`const char [N]`,其中N是它中的字符数加1. (2认同)

Dav*_*ber 25

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

#include <functional>

std::function<double (double, double)> f = [](double a, double b) { return a*b };
Run Code Online (Sandbox Code Playgroud)