Savoir si la classe d'une instance hérite d'une autre classe
Bonjour,
Je cherche un moyen pour déterminer si la classe à laquelle appartient une instance est issue d'une classe parente donnée.
Exemple : Soit une classe de base nommée Vehicule.
Deux enfant en héritent : QuiRoule et QuiVole.
Moto et Voiture héritent de QuiRoule.
Avion hérite de QuiVole.
J'ai un conteneur de Vehicule*, dont le contenu est composé d'instances de Moto*, Voiture* et Avion*.
Je veux parcourir ce conteneur en filtrant sur les instances dont le type est hérité de QuiRoule.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include <iostream>
#include <vector>
class Vehicule
{
virtual void f() = 0;
};
class QuiRoule: public Vehicule
{
virtual void f() = 0;
};
class Voiture: public QuiRoule
{
void f() {}
};
class Moto: public QuiRoule
{
void f() {}
};
class QuiVole: public Vehicule
{
virtual void f() = 0;
};
class Avion: public QuiVole
{
void f() {}
};
int main()
{
std::vector<Vehicule*> v;
v.push_back(new Moto());
v.push_back(new Avion());
v.push_back(new Voiture());
for (size_t i = 0; i < v.size(); ++i)
{
if (typeid (*v[i]) == typeid (QuiRoule)) // ne marche pas, bien évidemment
{
std::cout << "v[" << i << "]" << " est un véhicule qui roule" << std::endl;
}
}
return 0;
} |
Pour résumé, je cherche quelque chose qui ressemblerait à un
Code:
typeid(*v[i]) == ANY_SUBCLASS(typeid(QuiRoule))
ou encore le
Code:
isinstance(mon_objet, ClasseParente)
utilisé par les pythonistes :-).
Merci