std::tuple 递归遍历

template<typename Tuple, size_t N>
struct tuple_show
{
    static void show(const Tuple &t, std::ostream& os)
    {
        tuple_show<Tuple, N - 1>::show(t, os);
        os << ", " << std::get<N - 1>(t);
    }
};


// 偏特性,可以理解为递归的终止
template<typename Tuple>
struct tuple_show < Tuple, 1>
{
    static void show(const Tuple &t, std::ostream &os)
    {
        os <<  std::get<0>(t);
    }
};



// 自己写个函数,调用上面的递归展开,
template<typename... Args>
std::ostream& operator << (std::ostream &os, const std::tuple<Args...>& t)
{
    os << "[";
    tuple_show<decltype(t), sizeof...(Args)>::show(t, os);
    os << "]";

    return os;
}


auto t1 = std::make_tuple(1, 'A', "-=+", 2);
std::cout << t1;

https://www.cnblogs.com/pandamohist/p/13630613.html

你可能感兴趣的:(c++)