et pourquoi pas "B::toto" ???
L'appel des méthodes virtuelles dans les constructeurs et dans les destructeurs sont à proscrire car le comportement n'est pas défini par la norme et le comportement est fonction du compilateur et des options de compilation.
Avec certaines optimisations, il n'y aura ni "B::toto" ni "A::toto" mais un plantage pour appel de méthode "pure".
- Comment je peux faire pour comparer le type dynamique de deux instances ?
On est en C++/CLI.
Si c'est des objets managés, ils ont la méthode "GetType".
if (typeid(a).name() == typeid((A*)b).name())
typeid retourne un "const type_info&" qui a un opérateur de comparaison donc le code est :
if (typeid(a) == typeid(b))
- je voudrais tester si une methode existe dans un obj, mais si possible de facon opti (pas de comparaison de string ou autre...)
par exemple :
Cela sent déjà la conception bien boiteuse :
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
|
class Base
{
public:
virtual void titi() = 0;
}
class A : public Base
{
virtual void titi()
{
....
}
}
class B : public Base
{
virtual void titi()
{
....
}
}
A *a = new A();
B *b = new B();
Base *list[] = {a, b};
for (int i = 0; i < sizeof(list) / sizeof(*list); i++)
list[i]->titi(); |
Sinon, en C++/CLI, il y a le réflexion, mais cela ne vous exonère pas d'avoir un peu de réflexion.
P.S.: utilisez les containers de la stl, SVP.
Partager