如何爲派生類創建高效的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