Mat*_*her 0 c++ lambda template-argument-deduction generic-lambda c++17
我使用宏从旧的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
}
Run Code Online (Sandbox Code Playgroud)
几次.fun1()具有一组不同的依赖于参数fun2()的参数类型,我可以具有arg1和arg2有作为(真实代码实际上有几层ifs各自的时间与每个分支内的不同组的类型,功能几个附加层).
我想在一个可以采用这样的模板lambda的函数中考虑这个:
[&](auto arg) { fun1(fun2(arguments, arg));}
Run Code Online (Sandbox Code Playgroud)
现在,问题是这是模板化的,所以我不能把它变成一个std::function,所以我不知道我应该使用什么样的参数来创建我的函数:
void dispatch(bool condition, const std::vector<double>& arg1, double arg2, ???? lambda)
{
if(condition)
{
lambda(arg1);
}
else
{
lambda(arg2);
}
}
Run Code Online (Sandbox Code Playgroud)
C++ 17中有这样的选项吗?甚至C++ 20?
现在,问题是这是模板化的,所以我不能把它变成一个
std::function,所以我不知道我应该使用什么样的参数来创建我的函数
简单如下呢?
template <typename F>
void dispatch(bool condition, const std::vector<double>& arg1, double arg2, F lambda)
Run Code Online (Sandbox Code Playgroud)
我的意思是......你可以看到一个lambda函数几乎就像一个类的对象的语法糖一样operator()(operator()在泛型lambda的情况下是一个模板).
所以你可以简单地通过类的模板类型拦截lambda.
也许你可以接受它作为const引用(F const & lambda),如果lambda不是可变的,以避免不必要的副本.
C++ 17中有这样的选项吗?甚至C++ 20?
应该从C++ 14开始工作.在C++ 14之前,通用lambda不可用(但您可以使用带有模板operator()的显式类替换它们).
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |