3 回答
TA贡献1805条经验 获得超9个赞
我在C ++ 11(gcc 4.7)中工作正常。我敢肯定,我没有考虑过一些陷阱,但是我认为代码易于阅读并且并不复杂。唯一奇怪的是可以确保我们在到达最后一个元素时终止的“后卫”结构tuple_printer。另一个奇怪的事情可能是sizeof ...(Types),它返回Types类型包中的类型数。它用于确定最后一个元素的索引(大小...(类型)-1)。
template<typename Type, unsigned N, unsigned Last>
struct tuple_printer {
static void print(std::ostream& out, const Type& value) {
out << std::get<N>(value) << ", ";
tuple_printer<Type, N + 1, Last>::print(out, value);
}
};
template<typename Type, unsigned N>
struct tuple_printer<Type, N, N> {
static void print(std::ostream& out, const Type& value) {
out << std::get<N>(value);
}
};
template<typename... Types>
std::ostream& operator<<(std::ostream& out, const std::tuple<Types...>& value) {
out << "(";
tuple_printer<std::tuple<Types...>, 0, sizeof...(Types) - 1>::print(out, value);
out << ")";
return out;
}
- 3 回答
- 0 关注
- 317 浏览
添加回答
举报