Exemplos viáveis de C ++ RTTI [fechado]
Eu estou familiarizado com o C ++ RTTI e acho o conceito interessante.
Ainda existem muito mais maneiras de abusar do que usá-lo corretamente (o medo do interruptor RTTI vem à mente). Como desenvolvedor, encontrei (e usei) apenas dois usos viáveis para ele (mais exatamente, um e meio).
Você poderia compartilhar algumas das maneiras pelas quais o RTTI é uma solução viável para um problema, com exemplo de código / pseudo-código incluído?
Nota: O objetivo é ter um repositório de exemplos viáveis que um desenvolvedor júnior pode consultar, criticar e aprender.
Editar: Você encontrará o código abaixo usando 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 ;
}
}