【发布时间】:2019-08-03 07:18:48
【问题描述】:
P0780 ("Allow pack expansion in lambda init-capture"),已获准用于 C++20,允许通过在作为 lambda 捕获的一部分的包扩展之前放置省略号 (...) 来生成闭包数据成员包。
这很有用 - 例如 - 当通过移动捕获一个包时:
template <typename... Ts>
void foo(Ts... xs)
{
bar([...xs = std::move(xs)]{ /* ... */ });
}
在玩弄这个功能时,我想出了这个神秘的结构:
template <typename... Ts>
void foo(Ts... xs)
{
[...xs...]{}();
}
int main()
{
foo(0, 1, 2);
}
g++ (trunk) 编译它,但老实说,我很难理解它的含义。这是什么意思?生成闭包将作为数据成员具有什么?
【问题讨论】:
标签: c++ lambda variadic-templates c++20