【发布时间】:2019-01-08 17:00:20
【问题描述】:
我使用宏从旧 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 (真正的代码实际上有几层ifs,每次都有不同的集合类型,每个分支内还有几个额外的函数层)。
我想把这个因素考虑到一个可以像这样采用模板 lambda 的函数中:
[&](auto arg) { fun1(fun2(arguments, arg));}
现在,问题是这是模板化的,所以我不能把它变成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?
【问题讨论】:
-
将
dispatch也设为模板有什么问题? -
你为什么不写
fun1(fun2(arguments, {arg2}));
标签: c++ lambda c++17 template-argument-deduction generic-lambda