Jam*_*ree 16 c++ lambda variadic-functions c++14
在C++ 14中,广义lambda捕获让我们做:
template<class T>
auto pack(T t)
{
return [t=std::move(t)](auto&& f){f(t);};
};
Run Code Online (Sandbox Code Playgroud)
但它没有玩param-pack:
template<class... T>
auto pack(T... t)
{
return [t=std::move(t)...](auto&& f){f(t...);};
};
Run Code Online (Sandbox Code Playgroud)
是否有任何特殊语法或进一步的标准提案来解决这个问题?
Bri*_*ian 19
我的C++ 14草案说([expr.prim.lambda]/24):
甲简单捕获后跟省略号是一包扩展(14.5.3).一个初始化捕捉后跟省略号是非法的构造.
所以看起来没有办法进行可变的广义捕获.一个可能的解决方法是只捕获元组中的参数,然后使用这里建议的解决方案之一:"解压缩"一个元组来调用匹配的函数指针
auto pack(T... t)
{
return [args=make_tuple(std::move(t)...)](auto&& f){
// find a way to call f with args
};
};
Run Code Online (Sandbox Code Playgroud)
编辑:
它现在被投票到C++ 20,由这个提议制作.虽然语法有点不同:
template<class... T>
auto pack(T... t)
{
return [...t=std::move(t)](auto&& f){f(t...);};
};
Run Code Online (Sandbox Code Playgroud)
请注意,...它位于init-capture之前.
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |