Esta es una continuación de mi pregunta anterior sobre contenedores STL de impresión bonita , para la cual logramos desarrollar una solución muy elegante y completamente general.
En este siguiente paso, me gustaría incluir la impresión bonita para std::tuple<Args...>
, usando plantillas variadas (por lo que esto es estrictamente C ++ 11). Porque std::pair<S,T>
, simplemente digo
std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p)
{
return o << "(" << p.first << ", " << p.second << ")";
}
¿Cuál es la construcción análoga para imprimir una tupla?
Probé varios bits de desempaquetado de la pila de argumentos de la plantilla, pasando índices y usando SFINAE para descubrir cuándo estoy en el último elemento, pero sin éxito. No te cargaré con mi código roto; Es de esperar que la descripción del problema sea lo suficientemente sencilla. Básicamente, me gustaría el siguiente comportamiento:
auto a = std::make_tuple(5, "Hello", -0.1);
std::cout << a << std::endl; // prints: (5, "Hello", -0.1)
¡Puntos de bonificación por incluir el mismo nivel de generalidad (char / wchar_t, delimitadores de pares) que la pregunta anterior!