C++ 通用输出运算符重载

标签 c++ generics overloading operator-keyword output

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 << “some string”;”被使用。

最佳答案

您已经创建了一个可以为所有 类型调用的输出运算符,显然它只能用于WX 类。您需要缩小输出运算符函数的范围。

关于C++ 通用输出运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14437357/

相关文章:

c++ - 实现多个函数调用是不好的做法吗?

c++ - 错误 C2661 : 'CObject::operator new' : no overloaded function takes 4 arguments

java - 如何在Java中创建通用数组?

java - 继承带有冲突的通用 super 接口(interface)的原始类型

c# - 类型参数 'T' 与外部类型 '...

c++ - 在 C++ 中编写自定义 for 循环

c++ - 类方法中对全局重载运算符的 undefined reference

C++ Linux 如何使用 libtar

c++ - 如何在 Visual Studio 2017 中为 Linux 应用程序启用多线程

c++ - 基类是否可以提供派生类实现的迭代器接口(interface)?