在开关语句中分配 lambda



我想根据变量的值定义一个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; };

最新更新