Как перегрузить оператор вставки потока шаблоном? - PullRequest
2 голосов
/ 20 ноября 2010

Я пытаюсь перегрузить оператор вставки потока, поэтому я могу напечатать std :: vector в std :: cout, но у меня проблема с синтаксисом.

Вот что я пробовал:

template<typename T> std::ostream & operator<<(std::ostream &os, std::vector<T> &v)
{
    std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, ', '));
    return os;
};

И я хотел использовать это так:

std::vector<float> v(3, 1.f);
std::cout << v;

Каков правильный синтаксис для такой перегрузки операторов?

1 Ответ

2 голосов
/ 20 ноября 2010

Код почти в порядке, однако:

  • Разделитель ', ' неверен: используйте ", "
  • Ваша функция может (и должна) принимать константную ссылку на v: const std::vector<T> &v
  • Существует лишний ; после закрывающей функции скобки:)

Для записи, ', ' является многосимвольной константой типа int, поэтому компилятор жалуется, что перегрузка конструктора std::ostream_iterator не соответствует списку аргументов '(std::ostream, int)'.

...