Я играю с вариативными шаблонами, и в настоящее время я пытаюсь реализовать operator<<
для tuple.template looping through tuple
Я пробовал следующий код, но он не компилируется (GCC 4.9 с -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;
}
Сообщение об ошибке очень непонятная и долго, но в основном говорит, что нет никакого вызова функции согласования для ГЭТ. Может кто-нибудь объяснить мне, почему? Спасибо.
EDIT: Вот шаблон конкретизации Я использую
auto t = make_tuple(5,6,true,"aaa");
cout << t << endl;
MCVE как обычно пожалуйста! Как вы фактически создаете экземпляр функции шаблона? –
Возможный дубликат [Pretty-print std :: tuple] (http://stackoverflow.com/questions/6245735/pretty-print-stdtuple) – bobah
Большая часть кода, который распаковывает кортежи по позиции, которую я видел, идет от 'sizeof ... (Tlist) 'вниз до' 0', а не наоборот. –