C++ 两面都有省略号的Lambda pack capture-这是什么意思?
,批准用于C++20,允许通过在包扩展之前放置省略号(C++ 两面都有省略号的Lambda pack capture-这是什么意思?,c++,lambda,variadic-templates,c++20,C++,Lambda,Variadic Templates,C++20,,批准用于C++20,允许通过在包扩展之前放置省略号(…)作为lambda捕获的一部分来生成一组闭包数据成员 例如,在通过移动捕获包时,这非常有用: template <typename... Ts> void foo(Ts... xs) { bar([...xs = std::move(xs)]{ /* ... */ }); } 模板 无效foo(Ts…xs) { 条([…xs=std::move(xs)]{/*…*/}); } 在使用此功能时,我想出了一个神秘的结构:
…
)作为lambda捕获的一部分来生成一组闭包数据成员
例如,在通过移动捕获包时,这非常有用:
template <typename... Ts>
void foo(Ts... xs)
{
bar([...xs = std::move(xs)]{ /* ... */ });
}
模板
无效foo(Ts…xs)
{
条([…xs=std::move(xs)]{/*…*/});
}
在使用此功能时,我想出了一个神秘的结构:
template <typename... Ts>
void foo(Ts... xs)
{
[...xs...]{}();
}
int main()
{
foo(0, 1, 2);
}
模板
无效foo(Ts…xs)
{
[…xs…]{}();
}
int main()
{
foo(0,1,2);
}
g++(trunk)编译了它,但我真的很难理解它的含义。这是什么意思?生成闭包作为数据成员有哪些内容?它的格式应该不正确。已存档(…并且已修复!)中的语法是: 捕获:
简单捕获
…
opt…
opt init capture
您可以拥有一个简单的捕获(即xs…
)或者拥有一个init捕获(即…xs=xs
,init捕获需要有一个初始值设定项)。你不可能同时拥有这两样东西