【问题标题】:What is the easy way to iterate a std::tuple? [duplicate]迭代 std::tuple 的简单方法是什么? [复制]
【发布时间】:2019-04-18 20:03:43
【问题描述】:

目前我认为我可以做到以下几点

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

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

【问题讨论】:

标签: c++ tuples c++17


【解决方案1】:

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

for (auto e : my_tuple)

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

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

否则,当今语言中唯一的方法就是通过一个新的作用域来解包你的元组。这可能是std::apply(它一次性为您提供所有元素),或者您可以编写自己的版本,一次传入一个元素,因此您得到一元lambda。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2015-12-02
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多