我想根据变量的值定义一个lambda,所以我使用了一个switch语句。
但是,我似乎无法弄清楚如何键入保存 lambda 的变量。
我试过这个:
auto valueFunction = [](int s, int d, int ct, int tt) { return -1; };
switch (changeMethod) {
case VeloChangeMethod::EXPONENTIAL_GROWTH:
valueFunction = [](int s, int d, int ct, int tt) { return /* maths goes here */ };
case VeloChangeMethod::EXPONENTIAL_DECAY:
valueFunction = [](int s, int d, int ct, int tt) { return /* maths goes here */ };
case VeloChangeMethod::NORMAL:
default:
valueFunction = [](int s, int d, int ct, int tt) { return /* maths goes here */ };
break;
}
并且只是定义:
auto valueFunction;
但是,使用上面的代码,一旦它尝试重新分配valueFunction
,编译器就会出错(与运算符"="不匹配)。
那么,如何在 switch 语句中创建 lambda,并保留它以供在 switch 语句完成后使用呢?
你不能这样做,因为每个 lambda 都有唯一的类型,并且它们不能相互分配。您可以改用std::function
。
std::function<int(int,int,int,int)> valueFunction = [](int s, int d, int ct, int tt) { return -1; };