У меня есть базовый класс, похожий на код ниже. Я пытаюсь перегрузить < < < для использования с cout. Однако g++ говорит:
base.h:24: warning: friend declaration ‘std::ostream& operator<<(std::ostream&, Base<T>*)’ declares a non-template function
base.h:24: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning
Я попытался добавить < > after < < в объявлении класса/прототипе. Однако, я получаю его does not match any template declaration
. Я пытаюсь полностью определить шаблон оператора (который я хочу), но я только смог заставить его работать со следующим кодом, при этом оператор вручную создавал экземпляр.
base.h
template <typename T>
class Base {
public:
friend ostream& operator << (ostream &out, Base<T> *e);
};
base.cpp
ostream& operator<< (ostream &out, Base<int> *e) {
out << e->data;
return out;
}
Я хочу просто иметь это или подобное в заголовке, base.h:
template <typename T>
class Base {
public:
friend ostream& operator << (ostream &out, Base<T> *e);
};
template <typename T>
ostream& operator<< (ostream &out, Base<T> *e) {
out << e->data;
return out;
}
Я читал в другом месте в Интернете, что размещение < < < < < и() в прототипе должны исправить это, но это не так. Могу ли я получить это в одном шаблоне функции?