Questo è un follow-up alla mia precedente domanda sui contenitori STL graziosi , per i quali siamo riusciti a sviluppare una soluzione molto elegante e del tutto generale.
In questo passaggio successivo, vorrei includere la stampa graziosa per std::tuple<Args...>
, utilizzando modelli variadici (quindi questo è rigorosamente C ++ 11). Perché std::pair<S,T>
, dico semplicemente
std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p)
{
return o << "(" << p.first << ", " << p.second << ")";
}
Qual è la costruzione analoga per la stampa di una tupla?
Ho provato vari bit di decompressione dello stack di argomenti del modello, passando gli indici e usando SFINAE per scoprire quando sono all'ultimo elemento, ma senza successo. Non ti appesantirò con il mio codice rotto; si spera che la descrizione del problema sia abbastanza semplice. Essenzialmente, vorrei il seguente comportamento:
auto a = std::make_tuple(5, "Hello", -0.1);
std::cout << a << std::endl; // prints: (5, "Hello", -0.1)
Punti bonus per aver incluso lo stesso livello di generalità (char / wchar_t, delimitatori di coppia) della domanda precedente!