c++ - 迭代 std::tuple 的简单方法是什么?

标签 c++ tuples c++17

<分区>

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

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/

相关文章:

C++ 元组链接问题 : undefined reference

c++ - 为什么 ADL 不能使用 std::get 解析为正确的函数

c++ - opencv2.2中的cvsnakeimage

c++ - 将变量从一个函数传递给另一个麻烦(C++)

c++ - 我的代码中的 binary_search 谓词有什么问题

c++ - c++ 中没有 std::tuple 的 std::iterator 有什么原因吗?

c++ - Windows 7 中的滚动条外观控制

python - 将元组附加到列表

c++ - 对 unordered_map 的奇怪行为感到震惊

c++ - 除了与旧标准代码一起使用外,Boost 库在包含在 C++ 中后会发生什么变化?