Оператор перегрузки << для массивов

Я хочу перегрузить operator << для произвольных массивов, чтобы код ] cout << my_arr подойдет. Сначала я попытался перегрузить второй параметр оператора << на const T (& arr) [N] , где T и N параметры шаблона. Но тестирование кода выявило побочный эффект: const char [] также соответствует спецификации типа, и новая перегрузка конфликтует с перегрузкой, определенной в классе потока. Пример кода:

#include <cstddef>
#include <iostream>

template<typename T, std::size_t N>
std::ostream& operator<<(std::ostream& os, const T (&arr)[N])
{
    /* do stuff */
    return os;
}

int main()
{
    std::cout << "noooo\n"; /* Fails: ambiguous overload */
}

Можно ли еще реализовать такой оператор печати массива?

7
задан Andrey Vihrov 23 February 2012 в 21:23
поделиться