我想对给定元组的每个元素应用函数应用一种方法,我提出了一个解决方案,该解决方案在以下示例中进行了证明。
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'), ...
。