Esta é uma continuação da minha pergunta anterior sobre contêineres STL de impressão bonita , para a qual conseguimos desenvolver uma solução muito elegante e totalmente geral.
Nesta próxima etapa, gostaria de incluir a impressão bonita para std::tuple<Args...>
, usando modelos variadic (portanto, é estritamente C ++ 11). Pois std::pair<S,T>
, eu simplesmente digo
std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p)
{
return o << "(" << p.first << ", " << p.second << ")";
}
Qual é a construção análoga para imprimir uma tupla?
Eu tentei vários pedaços de desempacotamento da pilha de argumentos do template, passando índices e usando SFINAE para descobrir quando estou no último elemento, mas sem sucesso. Não vou sobrecarregá-lo com meu código quebrado; a descrição do problema é esperançosamente direta o suficiente. Essencialmente, gostaria do seguinte comportamento:
auto a = std::make_tuple(5, "Hello", -0.1);
std::cout << a << std::endl; // prints: (5, "Hello", -0.1)
Pontos de bônus por incluir o mesmo nível de generalidade (char / wchar_t, delimitadores de pares) da pergunta anterior!