用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的二进制。一旦我们介绍了一个"包装"运算符,已经有一个建议(使用[:](,您也可以编写(std::cout << [:]tup << 'n'), ...

最新更新