JavaのinstanceofをC++で実現する
Javaにはinstanceof演算子を下記のように使うことで、抽象クラスAがBクラスであれば、
trueになる。※Aは抽象クラス。Bはその派生クラス。
A instanceof B
このような演算子はC++には無いですが、下記のようにすると実現できる。
(1)Aクラスに、virtualでasB()関数を追加し、NULL(0)を返すようにする。
※戻り値型はA*
(2)BクラスではasB()関数をオーバライドし、thisを返す。
以上より、asB()がNULLであれば、Bクラス以外の派生クラスであり、asBが!NULLであればBクラスであることが判明する。
デメリットとしては、スーパークラスであるAが派生クラスを知ってないといけないということが挙げられる。