C++ 在switch语句中分配lambda
我想根据变量的值定义lambda,所以我使用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
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; };