class W
{
private:
long m_val1, m_val2;
public:
W(long& val1, long& val2):m_val1(val1), m_val2(val2) {}
template<class T>
friend std::ostream& operator<<(std::ostream& os, const T& w);
};
class X
{
private:
long m_val1, m_val2;
public:
X(const long& val1, long& val2):m_val1(val1), m_val2(val2) {}
template<class T>
friend std::ostream& operator<<(std::ostream& os, const T& x);
};
template<class T>
std::ostream& operator<<(std::ostream& os, const T& obj)
{
os << "m_val1: " << obj.m_val1 << ", m_val2: " << obj.m_val2 << endl;
}
Это НЕ работает. Может ли кто-нибудь указать, что я пропущу? Благодарю. Кроме того, это приводит к ошибке «C2593:« операция < < »является неоднозначной« везде »cout < <« некоторая строка »; используется.Перегрузка с общим выходом оператора C++
Как ограничить область действия общей функции и шаблонов классов? –
@KokHowTeh. Один из способов - создать общий базовый класс и иметь немодулированный оператор вывода для этого базового класса. Или у вас просто два оператора вывода, по одному для каждого класса. –