c ++强制operator ==从接口抽象类重载

Ode*_*ded 5 c++ abstract-class operator-overloading

在c ++上使用接口(抽象类)我需要强制任何类而不是继承接口来实现operator ==.考虑这种情况:

class IBase
{
   virtual void someFunc() const = 0; 
}

class CInheritClass : public IBase
{
   virtual void someFunc() const; 
   virtual bool operator== ( const CInheritClass& obj ) const;
}

void main()
{
  CInheritClass instance;
}
Run Code Online (Sandbox Code Playgroud)

class CInheritClass必须实现someFunc,因为它继承了Ibase,实现virtual bool operator== ( const CInheritClass& obj ) const;不是必需的.我想以任何继承者X必须实现的方式修改IBase类

virtual bool operator== ( const X& obj ) const
Run Code Online (Sandbox Code Playgroud)

以下代码将起作用:

template<class X>
class IBase
{
   virtual void someFunc() const = 0; 
   virtual bool operator== ( const X& obj ) const = 0;

}

class CInheritClass : public IBase<CInheritClass>
{
   virtual void someFunc() const; 
   virtual bool operator== ( const CInheritClass& obj ) const;
}
Run Code Online (Sandbox Code Playgroud)

但我追求的是一个不使用模板的解决方案,因为每个希望实现IBase的类都必须继承自己作为模板类的IBase,class X : public IBase<X>这对任何未来可能会查看我的代码的开发人员来说都是令人困惑和不清楚的.任何的想法 ?

ben*_*bin 5

使用纯虚函数声明

virtual bool operator== ( const IBase& obj ) const = 0;
Run Code Online (Sandbox Code Playgroud)

实施的一个例子:

bool CInheritClass ::operator==( const IBase& obj ) const
{
     const CInheritClass *o = dynamic_cast<const CInheritClass*>(&obj);
     if (o == NULL) return false;
     // TODO
}
Run Code Online (Sandbox Code Playgroud)

输入类型应该是基类,否则您将无法对基础对象进行多态调用比较

对于从模板继承的想法:警告,两个派生类之间的基类不再相同.=>更改基类的目的:使用模板只需共享代码,强制用户实现函数并防止2派生类之间出现重复代码

这真的取决于你想要做什么.它可以是一个好的设计,或不...