当我使用抽象基类时,我无法弄清楚必须如何完成重载比较运算符。主要问题是使用该基类实现多态性,因为它是抽象的,因此无法实例化,因此我不得不使用指向该基类的指针来访问派生类方法。我会放一些代码来更好地描述这种情况:
template <typename _Tp>
class Base
{
private:
_Tp attr ;
public:
foo() = 0 ;
friend bool operator == ( Base* b1, Base* b2)
{
return ( b1.attr == b2.attr ) ;
}
};
template <typename _Tp> class Derived_1 : public Base<_Tp> { /.../ } ;
template <typename _Tp> class Derived_2 : public Base<_Tp> { /.../ } ;
int main (void)
{
vector<Base*<int> > * v = new vector<Base*<int> > (2,0) ;
v[0] = new Derived_1 () ;
v[1] = new Derived_2 () ;
if ( (*v)[0] == (*v)[1] ) { /.../ }
return 0 ;
}
所以,此时你会注意到(*v)[0] == (*v)[1]
它是一个指针比较Base*
。我想知道是否有办法重载这两个指针之间的比较运算符,因为从不使用基类中定义的重载运算符。
回复后编辑:
因为在我的真实代码中,比较必须是(*v)[0] == (*v)[1]
我无法比较对象,因为我的数据结构会失去一般性。因此,我想问你的是:
Base
可以做指针的比较吗?如何?
我从编译器那里得到错误,告诉我:
bool operator == (Base*,Base*) 必须有一个类或枚举类型的参数。