如何在 C++ 11 中迭代 std::tuple [重复]

2024-02-28

我制作了以下元组:

我想知道我应该如何迭代它?有tupl_size(),但是阅读文档,我不知道如何使用它。我也有搜索,但问题似乎存在Boost::tuple .

auto some = make_tuple("I am good", 255, 2.1);

template<class F, class...Ts, std::size_t...Is>
void for_each_in_tuple(const std::tuple<Ts...> & tuple, F func, std::index_sequence<Is...>){
    using expander = int[];
    (void)expander { 0, ((void)func(std::get<Is>(tuple)), 0)... };
}

template<class F, class...Ts>
void for_each_in_tuple(const std::tuple<Ts...> & tuple, F func){
    for_each_in_tuple(tuple, func, std::make_index_sequence<sizeof...(Ts)>());
}

Usage:

auto some = std::make_tuple("I am good", 255, 2.1);
for_each_in_tuple(some, [](const auto &x) { std::cout << x << std::endl; });

Demo http://coliru.stacked-crooked.com/a/0b99052cbada2ffb.

std::index_sequence和 family 是 C++14 功能,但它们可以在 C++11 中轻松实现(SO 上有很多可用)。多态 lambda 也是 C++14,但可以用自定义编写的函子替换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++ 11 中迭代 std::tuple [重复] 的相关文章

随机推荐