Мой вопрос связан немного с this один.функция друга в определении шаблона
Я хочу, чтобы перегрузить оператор < < для некоторого класса, и я нашел две разные обозначения, что и работа:
template <class T>
class A{
T t;
public:
A(T init) : t(init){}
friend ostream& operator<< <> (ostream &os, const A<T> &a); //need forward declaration
//template <class U> friend ostream& operator<< (ostream &os, const A<U> &a);
};
ли я определить одинаковые вещи с разными обозначениями? Или первая версия более ограничительная, в каком экземпляре (в данном случае только экземпляр с тем же T, что и мой класс A) < < является другом A?
Пара вещей. Во-первых, я думаю, вы имели в виду «os << b.t», а не «os << b.i» для вывода принадлежащей члену переменной. Во-вторых, приведенный выше пример будет отлично работать с любым оператором << instance, поскольку он будет использовать функцию ostreame & operator << (ostream & os, double num) ', а не объявленную версию шаблона. – workmad3
У меня была голова где-то в другом месте, но это было исправлено в среднем. –