【发布时间】:2015-03-25 18:44:11
【问题描述】:
我正在使用可变参数模板,目前正在尝试为元组实现operator<<。
我已尝试以下代码,但无法编译(GCC 4.9 with -std=c++11)。
template<int I, typename ... Tlist>
void print(ostream& s, tuple<Tlist...>& t)
{
s << get<I>(t) << ", ";
if(I < sizeof...(Tlist)){
print<I+1>(s,t);
}
}
template<typename ... Tlist>
ostream& operator<<(ostream& s, tuple<Tlist...> t)
{
print<0>(s,t);
return s;
}
错误信息非常神秘且冗长,但它基本上说没有匹配的函数调用获取。有人可以向我解释为什么吗? 谢谢。
编辑: 这是我正在使用的模板实例化
auto t = make_tuple(5,6,true,"aaa");
cout << t << endl;
【问题讨论】:
-
请照常进行MCVE!您实际上是如何实例化模板函数的?
-
我见过的大多数按位置解包元组的代码都是从
sizeof...(Tlist)向下到0,而不是相反。
标签: c++ c++11 variadic-templates stdtuple