说B
和C
都源自A
。我希望能够在不使用 RTTI的情况下测试派生类的任何两个实例是否A
是同一类的实例,即是否A* foo
都A* bar
指向实例。B
我目前的解决方案是这样的:
class A {
protected:
typedef uintptr_t Code;
virtual Code code() const = 0;
}; // class A
class B : public A {
protected:
virtual Code code() const { return Code(&identity); }
private:
static int identity;
}; // class B
class C : public A {
protected:
virtual Code code() const { return Code(&identity); }
private:
static int identity;
}; // class C
使用这种方法,operator==
可以简单地测试first.code() == second.code()
。我想identity
从派生类中删除文字并让代码自动找到A
,因此并非所有派生类都必须重复这个习语。同样,我强烈不希望使用 RTTI。有没有办法做到这一点?