C ++ RTTI-Beispiele [geschlossen]
Ich bin mit C ++ RTTI vertraut und finde das Konzept interessant.
Trotzdem gibt es viel mehr Möglichkeiten, es zu missbrauchen, als es richtig zu benutzen (die Furcht vor dem RTTI-Schalter kommt in den Sinn). Als Entwickler fand (und verwendete) ich nur zwei brauchbare Verwendungen dafür (genauer eineinhalb).
Könnten Sie einige der Möglichkeiten beschreiben, wie RTTI eine praktikable Lösung für ein Problem darstellt, einschließlich Beispielcode / Pseudocode?
Hinweis: Ziel ist es, eine Sammlung praktikabler Beispiele bereitzustellen, die ein Junior-Entwickler konsultieren, kritisieren und von denen er lernen kann.
Bearbeiten: Sie finden den folgenden Code mit 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 ;
}
}