#include <tuple>
#include <iostream>
using namespace std;
// 由于std::get<size_t>(t)的语法中是size_t必须在编译的时候确定,所以无法传左值。
// 借助模板中的可变模板参数递归实现
template<typename Tuple, size_t N>
struct tuple_print
{
static void print(const Tuple& t, std::ostream& os)
{
tuple_print<Tuple, N-1>::print(t, os);
os << ", " << std::get<N-1>(t);
}
};
// 类模板的特化版本
template<typename Tuple>
struct tuple_print<Tuple, 1>
{
static void print(const Tuple& t, std::ostream& os)
{
os << std::get<0>(t);
}
};
// operator<<
template<typename... Args>
std::ostream& operator<<(std::ostream& os, const std::tuple<Args...>& t)
{
os << "[";
tuple_print<decltype(t), sizeof...(Args)>::print(t, os);
os << "]";
return os;
}
int main(int argc, char const *argv[])
{
auto tup = make_tuple("sdfsd",1,3);
cout << tup << endl;
return 0;
}
备份地址: 【c++11遍历打印tuple(借助模版参数)】