簡體   English   中英

使用std :: apply迭代元組元素

[英]Iterate over tuple elements with std::apply

我想要一種方法將一個函數應用於給定元組的每個元素,我想出了一個解決方案,在下面的例子中進行了演示。

int main()
{
    std::apply([](auto&&... xs)
               { 
                   [](...){}(([](auto&& x){ std::cout << x << "\n"; }(std::forward<decltype(xs)>(xs)), false)...); 
               }, std::make_tuple(1, 2.f, 3.0));
}

這似乎工作正常,除了元組元素似乎以反轉順序處理,導致以下輸出:

3
2
1

誰能告訴我為什么?

內部空lambda [](...){}被評估的順序是未指定的(即使在評估順序論文之后)。

只需在逗號運算符上使用折疊:

std::apply([](auto&&... xs) {
               ((std::cout << std::forward<decltype(xs)>(xs) << '\n'), ...); },
           std::make_tuple(1, 2.f, 3.0));

演示 或直接在cout二進制折疊。 一旦我們引入了一個“packize”運算符,已經提出了一個提案(使用[:] ),你也可以編寫(std::cout << [:]tup << '\\n'), ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM