迭代std::元组的简单方法是什么



目前我想我可以做以下

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

这里t是元组。这种方式不容易阅读。还有别的办法吗?谢谢

基本上没有。因为tuple是异构的,所以不能有这样的东西:

for (auto e : my_tuple)

因为e在每次迭代中可能需要是不同的类型——这与我们在语言中习惯的迭代类型非常不同。P1306提出了一种全新的for循环来解决这个问题,拼写为for...

现在,我说在每次迭代中需要一个不同的类型。严格来说,这不是真的。如果你的tuple是同质的,你可以把它变成std::array。即使您的tuple是异构的,仍然可以将其转换为std::any的数组或std::variant<Ts...>的数组,由tuple碰巧包含的所有唯一类型组成。也许这能解决你的问题,也许不会。

否则,目前语言中唯一的方法就是通过一个新的作用域来解包元组。它可以是std::apply(它一次性为您提供所有元素(,也可以编写自己的版本,每次传递一个元素,这样您就得到了一元lambda。

相关内容

最新更新