我使用宏从旧 C++ 时代继承了这段代码。我目前正在更换它,并且我正处于需要考虑一些构造的地步。
通常,我有这个:
if(condition)
{
fun1(fun2(arguments, arg1)); // let's say arg1 is a vector of doubles
}
else
{
fun1(fun2(arguments, arg2)); // let's say arg2 is a double
}
几次。fun1()
根据fun2()
参数类型有一组不同的参数,我也可以有arg1
(arg2
真正的代码实际上有几层if
s ,每次都有不同的类型集,每个分支内还有几个额外的函数层)。
我想将这个因素考虑到一个可以采用这样的模板 lambda 的函数中:
[&](auto arg) { fun1(fun2(arguments, arg));}
现在,问题是这是模板化的,所以我不能把它变成 a std::function
,所以我不知道应该使用什么样的参数来创建我的函数:
void dispatch(bool condition, const std::vector<double>& arg1, double arg2, ???? lambda)
{
if(condition)
{
lambda(arg1);
}
else
{
lambda(arg2);
}
}
C ++ 17中有这样的选项吗?甚至 C++20?