Жизнеспособные примеры C ++ RTTI [закрыто]

Я знаком с C ++ RTTI и нахожу концепцию интересной.

Тем не менее, существует гораздо больше способов злоупотреблять этим, чем правильно его использовать (на ум приходит ужас RTTI-switch). Как разработчик, я нашел (и использовал) только два жизнеспособных использования для этого (точнее, полтора).

Не могли бы вы поделиться некоторыми способами, которыми RTTI является жизнеспособным решением проблемы, включая пример кода / псевдокода?

Примечание: цель состоит в том, чтобы создать хранилище жизнеспособных примеров, с которыми младший разработчик может консультироваться, критиковать и учиться.

Редактировать: Ниже вы найдете код с использованием C ++ RTTI

// A has a virtual destructor (i.e. is polymorphic)
// B has a virtual destructor (i.e. is polymorphic)
// B does (or does not ... pick your poison) inherits from A

void doSomething(A * a)
{
   // typeid()::name() returns the "name" of the object (not portable)
   std::cout << "a is [" << typeid(*a).name() << "]"<< std::endl ;

   // the dynamic_cast of a pointer to another will return NULL is
   // the conversion is not possible
   if(B * b = dynamic_cast<B *>(a))
   {
      std::cout << "a is b" << std::endl ;
   }
   else
   {
      std::cout << "a is NOT b" << std::endl ;
   }
}

Ответы на вопрос(10)

Ваш ответ на вопрос