Qu'est-ce que le contrôle de type à l'exécution en C++?Informations de type à l'exécution en C++
Répondre
Il vous permet d'identifier le type dynamique d'un objet lors de l'exécution. Par exemple:
class A
{
virtual ~A();
};
class B : public A
{
}
void f(A* p)
{
//b will be non-NULL only if dynamic_cast succeeds
B* b = dynamic_cast<B*>(p);
if(b) //Type of the object is B
{
}
else //type is A
{
}
}
int main()
{
A a;
B b;
f(&a);
f(&b);
}
Fonctionnalité dynamic_cast
- votre code peut détecter à l'exécution si un pointeur ou une référence donnée est réellement lié à un objet de type attendu.
Le nom correct est Run-time type information (RTTI).
+1 Je n'ai jamais vu "lmgtfy" avant =) Grande ressource, vraiment =) – SadSido
S'il vous plaît expliquer les downvotes faites à ce post. Downvoting sans commentaires n'est pas juste. –
Il ne s'agit pas seulement de dynamic_cast, mais de tout le RTTI qui en fait partie. Le meilleur endroit pour en apprendre davantage sur RTTI est la section 15.4 de la C++ Programming Language par Bjarne Stroustrup
Dans la quatrième édition, il s'agit du chapitre 22. – user1794469
Vous pouvez prendre une interface * et "demander" C++ à quel type d'objet le pointeur pointe. À ma connaissance, cela dépend de méta-informations d'exécution, qui nécessite quelques cycles pour stocker et rechercher de telles informations.
Examinez le mot-clé "typeid". Cela fournit le plus de magie.
dynamic_cast ne utilise RTTI, typeid avec std :: type_info me semble plus comme la "vraie chose".
http://stackoverflow.com/questions/351845/finding-the-type-of-an-object-in-c/351865#351865 jetez un oeil à ce – yesraaj