作者:丁军东建宏 | 来源:互联网 | 2023-02-06 05:04
我想要一种方法将一个函数应用于给定元组的每个元素,我想出了一个解决方案,在下面的例子中进行了演示.
int main()
{
std::apply([](auto&&... xs)
{
[](...){}(([](auto&& x){ std::cout <(xs)), false)...);
}, std::make_tuple(1, 2.f, 3.0));
}
这似乎工作正常,除了元组元素似乎以反转顺序处理,导致以下输出:
3
2
1
谁能告诉我为什么?
1> Columbo..:
[](...){}
评估内部空lambda的参数的顺序是未指定的(即使在评估顺序上的论文之后).
只需在逗号运算符上使用折叠:
std::apply([](auto&&... xs) {
((std::cout <(xs) <<'\n'), ...); },
std::make_tuple(1, 2.f, 3.0));
演示.或cout
直接二进制折叠.一旦我们引入了一个"packize"运算符,已经有一个提议(使用[:]
),你也可以写(std::cout <<[:]tup <<'\n'), ...
.