Я хочу перегрузить operator<<
для любых массивов, так что код cout << my_arr
будет работать. Сначала я попытался перегрузить второй параметр operator<<
на 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 */
}
Может ли такой оператор печати массива быть реализован?
Я не думаю, что N будет хорошо переноситься во многих случаях. 'void f (int arr [], size_t N) {cout << arr; } ' –
, если вам нужна внешняя библиотека, почему бы просто не использовать http://www.boost.org/doc/libs/1_48_0/doc/html/boost_lexical_cast.html – pyCthon
@Captain:' arr' фактически имеет тип 'int * 'в этом случае, поэтому он не будет соответствовать этой перегрузке. –