我有一个 C++ 代码,我在其中比较了从一个共同的母类派生的不同类,Foo
. 如果两个类的类型不同,则比较始终为false
。否则,它会比较特定于类的一些内部数据。
我的代码如下所示:
class Bar;
class Baz;
class Foo
{
public:
virtual bool isSame( Foo* ) = 0;
virtual bool isSameSpecific( Bar* ){ return false; }
virtual bool isSameSpecific( Baz* ){ return false; }
};
class Bar : public Foo
{
public:
bool isSame( Foo* foo){ return foo->isSameSpecific(this); }
bool isSameSpecific( Bar* bar){ return bar->identifier == identifier; }
int identifier;
};
// and the same for Baz...
这很好用(我认为这是一个双重调度),我可以比较Bar
和Baz
只有指向Foo
.
但现在问题来了。我必须添加一个模板类:
template< typename T>
class Qux : public Foo
{
//...
};
问题是Foo
,我无法声明该方法isSameSpecific
,Qux*
因为它是虚拟的和模板的。
问题:有没有什么巧妙的方法来克服这个问题?