问题描述
我在同一个命名空间中有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 (将#修改为@)