如何为派生类创建高效的equals
方法?如何对派生类进行平等测试
struct Base {
virtual bool equals(const Base &other) const = 0;
};
通常的答案是使用dynamic_cast
或typeid
在派生类中,检查标识类型,如果类型匹配,然后做一个比较:
struct Derived: Base {
virtual bool equals(const Base &other) const override {
if (typeid(*this)!=typeid(other)) return false;
return *this==static_cast<Derived &>(other);
}
};
有没有更有效的方法来做到这一点类型检查?如果我们禁用了RTTI,我们可以做些什么?
如果您愿意违背Liskov替代原则(这样做会引入可能会或可能不会被您接受的其他折衷),请使用双派遣。 – Peter
@Peter:你的意思是一个解决方案,所有派生类型都需要以某种形式列出? – geza
好吧,是的。如果你想要的行为取决于类型,而不需要测试类型(或类型ID),就必须针对每个重要的类型做一些特定的事情。 – Peter