C++において実行時に型によって処理を分けたい場合はどうするか.
例えば Baseを継承したサブクラスのインスタンスをBaseのポインタで格納することはよくある.

class Figure {
   public:
   virtual void Draw()const = 0;
};
class Circle : public Figure {
  ...
   public:
   virtual void Draw()const override {
      ...
   }
};
class Rect : public Figure{
   ...
   public:
   virtual void Draw()const override {
   }
};

void main(){
   std::vector<std::shared_ptr<Figure>> figures{};
   figures.emplace_back(new Circle{}));
   figures.emplace_back(new Rect{}));
   //描画
   for(const auto figure : figures){
      //例えばCircleのみ描画させたい場合,型の判定が必要.
       figure->Draw();
   }
}


アプローチとしてはRTTIか,ベタにenumを持たせることになる.

・RTTI
RTTI(Run-Time Type Identification)実行時型識別.
C++ではOSによらず実行時に型の識別が可能.
dynamic_castを用いるか,type_infoを用いる2通りのやり方がある.
dynamic_castは,castに失敗するとnullptrが返ることを利用している.

   for(const auto figure : figures){
      //Circleのみ描画させたい場合
      if(dynamic_cast<Circle*>(figure.get())){
         figure->Draw();
      }
   }
#include <typeinfo>
...
   for(const auto figure : figures){
      //Circleのみ描画させたい場合
      if(typeid(*figure) == typeid(Circle)){
         figure->Draw();
      }
   }