我想这样做(一类中)静态数组:lambda函数(C++)
static constexpr MyStruct ops[6] = {
{'+', [&] (double a, double b) { return a+b; } },
{'-', [&] (double a, double b) { return a-b; } },
...
};
凡MyStruct
定义为:
typedef double (*binOp)(double, double);
struct MyStruct {
char c;
binOp fn;
};
我也尝试:
std::function <double(double,double)> fn;
定义fn
,但没有运气。
我得到的第一个案例的错误是“错误:字段初始值设定项不是常量”我真的不明白。如果我尝试使用std::function
,它会变得更糟,因为它说:“声明时不能用非常量表达式初始化”。
为什么lambda函数不是常量?我错过了什么吗?
替换'和'const' constexpr'。 – Nawaz
lambda表达式当前可能不会出现在常量表达式中,但是最终可能会删除该限制:https://isocpp.org/files/papers/N4487.pdf – dyp