假设我有一个类型层次结构:
struct B { ... };
struct D1 : B { ... };
struct D2 : B { ... };
...
struct Dn : B { ... };
每个 Di 都有自己的operator==
定义:
struct Di : B
{
bool operator==(const Di&) const { ... }
...
};
我现在想定义 Boperator==
使得:
struct B
{
bool operator==(const B& that) const
{
// psuedo-code
let i, such the dynamic type of this is Di
let j, such the dynamic type of that is Dj
if (i != j)
return false;
else
return Di::operator==(this, that);
}
}
组织这个或写这个的最佳方式是什么?
(最终目标是我想使用具有 B* 值类型的标准容器类型(例如std::set<B*>
),但是Di::operator==s
当它们来自同一个派生类时使用自定义)