迭代std :: tuple的简单方法是什么?

时间:2018-11-15 16:47:11

标签: c++ tuples c++17

目前,我认为我可以执行以下操作

apply([](auto&... e) { forward_as_tuple((e.do_something(), 0)...); }, t);

这里是元组。这种方式不容易阅读。还有其他方法吗?谢谢。

1 个答案:

答案 0 :(得分:3)

基本上没有。因为tuple是异构的,所以不能有以下内容:

for (auto e : my_tuple)

因为e在每次迭代中都可能需要使用不同的类型-这与我们在该语言中所使用的迭代类型完全不同。 P1306提出了一种全新的for循环来解决此问题,拼写为for...

现在,我说您需要在每次迭代中使用不同的类型。 严格地是不正确的。如果您的tuple是同质的,则可以将其变成std::array。并且即使您的tuple是异构的,仍然要将其转换为std::anystd::variant<Ts...>的数组,该数组由tuple恰好包含的所有唯一类型组成。也许可以解决您的问题,也许不能。

否则,当今语言中的唯一方法就是通过新作用域来拆开元组。要么是std::apply(一次就能给您所有 all 个元素),要么您可以编写自己的版本,一次将一个元素传递给您,因此您会得到一元lambda 。