Это продолжение моего предыдущего вопроса о довольно-печатных контейнерах STL, для которых нам удалось разработать очень элегантное и полностью общее решение.
В этом следующем шаге я хотел бы включить красивую печать для std::tuple<Args...>
, используя вариативные шаблоны (так что это строго С++ 11). Для std::pair<S,T>
я просто говорю
std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p)
{
return o << "(" << p.first << ", " << p.second << ")";
}
Какова аналогичная конструкция для печати кортежа?
Я пробовал различные биты распаковки стека шаблона шаблона, передавая индексы вокруг и используя SFINAE, чтобы узнать, когда я нахожусь в последнем элементе, но без успеха. Я не буду обременять вас своим сломанным кодом; описание проблемы, надеюсь, достаточно прямолинейно. По сути, мне бы хотелось следующее поведение:
auto a = std::make_tuple(5, "Hello", -0.1);
std::cout << a << std::endl; // prints: (5, "Hello", -0.1)
Бонусные баллы за включение одинакового уровня общности (char/wchar_t, пары разделителей) в качестве предыдущего вопроса!