目前我想我可以做以下
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。