Скажите B
и C
являются производными от A
. Я хочу иметь возможность проверить, являются ли любые два экземпляра классов, производных от A
, экземплярами одного и того же класса, то есть указывают ли A* foo
и A* bar
оба на B
экземпляров, без использования RTTI. Мое текущее решение выглядит примерно так:
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. Есть ли способ сделать это?
Примечание: Я видел последние вопросы [1] и [2] , и это не дубликат. Эти постеры хотят проверить содержание их производных классов; Я просто хочу проверить тождеств .