C++ 在switch语句中分配lambda

C++ 在switch语句中分配lambda,c++,lambda,switch-statement,c++17,C++,Lambda,Switch Statement,C++17,我想根据变量的值定义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

我想根据变量的值定义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语句完成后保留它以供使用呢?

您不能这样做,因为每个语句都有唯一的类型,并且它们不能相互分配。您可以使用

std::function valueFunction=[](ints,intd,intct,inttt){return-1;};

您不能这样做,因为每个都有唯一的类型,并且它们不能相互分配。您可以使用

std::function valueFunction=[](ints,intd,intct,inttt){return-1;};

由于您的lambda是无捕获的,您应该特别检查,即您应该将lambda转换为指向函数的指针。您只需在第一个lambda之前添加一个
+
自动值函数=+[](…){…}。它会将lambda转换为函数指针,因此
auto
将被推断为函数指针。由于lambda是无捕获的,您应该特别检查,即,您应该将lambda转换为指向函数的指针。您只需在第一个lambda之前添加一个
+
auto valueFunction=+[](…){…}。它将lambda转换为函数指针,因此
auto
将被推断为函数指针。
std::function<int(int,int,int,int)> valueFunction = [](int s, int d, int ct, int tt) { return -1; };