命名空间中的模板朋友bool重载冲突

问题描述

我在同一个命名空间中有2个不同的类模板,xy和rgba。它们都重载运算符==和!=。编译时,出现错误,已定义了重载。是否因为这两个类都在同一个命名空间中?如果是这样,是否有避免冲突的技巧?我为模板尝试了不同的标签,它给了我相同的结果。

template <typename A>
class xy
{
public:

    A x,y;

    xy() :x(0),y(0) {}

    xy(A x,A y) :x(x),y(y) {}

    template<typename B>
    xy& operator = (const B& v) {
        x = A(v.x),y = A(v.y); return*this;
    }

    template<typename B,typename C>
    friend bool operator == (const B& a,const C& v) {
        return a.x == v.x && a.y == v.y;
    }

    template<typename B,typename C>
    friend bool operator != (const B& a,const C& v) {
        return a.x != v.x || a.y != v.y;
    }

    template<typename B>
    operator B() const {
        return B(x,y);
    }

};

class rgba
{
public:

    int r,g,b,a;

    rgba() :r(255),g(255),b(255),a(255) {}

    rgba(int r,int g,int b,int a) :r(r),g(g),b(b),a(a) {}

    template<typename B>
    rgba& operator = (const B& v) {
        r = A(v.r),g = A(v.g),r = A(v.b),a = A(v.a); return*this;
    }

    template<typename B,const C& v) { // <- already defined ?
        return a.r == v.r && a.g == v.g && a.b == v.b && a.a == v.a;
    }

    template<typename B,const C& v) { // <- already defined ?
        return a.r != v.r || a.g != v.g || a.b != v.b || a.a != v.a;
    }

    template<typename B>
    operator B() const {
        return B(r,a);
    }
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)