目前,我认为我可以执行以下操作
apply([](auto&... e) { forward_as_tuple((e.do_something(), 0)...); }, t);
这里是元组。这种方式不容易阅读。还有其他方法吗?谢谢。
答案 0 :(得分:3)
基本上没有。因为tuple
是异构的,所以不能有以下内容:
for (auto e : my_tuple)
因为e
在每次迭代中都可能需要使用不同的类型-这与我们在该语言中所使用的迭代类型完全不同。 P1306提出了一种全新的for
循环来解决此问题,拼写为for...
现在,我说您需要在每次迭代中使用不同的类型。 严格地是不正确的。如果您的tuple
是同质的,则可以将其变成std::array
。并且即使您的tuple
是异构的,仍然要将其转换为std::any
或std::variant<Ts...>
的数组,该数组由tuple
恰好包含的所有唯一类型组成。也许可以解决您的问题,也许不能。
否则,当今语言中的唯一方法就是通过新作用域来拆开元组。要么是std::apply
(一次就能给您所有 all 个元素),要么您可以编写自己的版本,一次将一个元素传递给您,因此您会得到一元lambda 。