B
とC
は から派生していますA
。RTTI を使用せずに、から派生したクラスの 2 つのインスタンス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 を使用しないことを強く望んでいます。これを行う方法はありますか?
注:最近の質問[1]と[2]を見ましたが、これは重複していません。これらの投稿者は、派生クラスの内容をテストしたいと考えています。私は単に身元をテストしたいだけです。