<分区>
目前我认为我可以做到以下几点
apply([](auto&... e) { forward_as_tuple((e.do_something(), 0)...); }, t);
这里的 t 是元组。这种方式不容易阅读。还有其他办法吗?谢谢。
<分区>
目前我认为我可以做到以下几点
apply([](auto&... e) { forward_as_tuple((e.do_something(), 0)...); }, t);
这里的 t 是元组。这种方式不容易阅读。还有其他办法吗?谢谢。
最佳答案
基本上,没有。因为tuple
s 是异构的,你不能有类似的东西:
for (auto e : my_tuple)
因为e
可能需要在每次迭代中使用不同的类型——这是一种与我们在语言中习惯的迭代非常不同的类型。 P1306正在提出一种全新的 for
循环解决这个问题,拼写为for...
现在,我说过您需要在每次迭代中使用不同的类型。这不是严格正确的。如果你的tuple
是同质的,你可以把它变成一个 std::array
.即使你的 tuple
是异构的,还是转成std::any
的数组或 std::variant<Ts...>
的数组,由 tuple
的所有独特类型组成恰好包含。也许这可以解决您的问题,也许不能。
否则,当今语言的唯一方法是通过新范围解压元组。那可能是 std::apply
(一次性为您提供 所有 元素)或者您可以编写自己的版本,一次传入一个元素,这样您就可以获得一元 lambda。
关于c++ - 迭代 std::tuple 的简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53324199/