Я знаком с С++ RTTI и нашел интересную концепцию.
Тем не менее существует много способов злоупотребления этим, чем использовать его правильно (на ум приходит ошибка RTTI-switch). Как разработчик, я нашел (и использовал) только два жизнеспособных для него использования (точнее, один с половиной).
Не могли бы вы поделиться некоторыми из способов, которыми RTTI является жизнеспособным решением проблемы, включая код кода/псевдокода?
Примечание. Цель состоит в том, чтобы иметь хранилище жизнеспособных примеров, которые младший разработчик может консультировать, критиковать и учиться.
Изменить: Ниже вы найдете код с использованием С++ 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 ;
}
}