Bon, bon c'est pas encore gagné ... Je cherche une solution la plus facilement maintenable et portable.
Je ne connaissais pas le RTTI, d'après ce que j'ai lu, c'est pas non plus adapté à mon cas. Si je souhaite ajouter une nouvelle classe dérivée de ma classe de référence, je dois modifié toutes les fonctions essayant de "dynamic_cast" mes classes dérivées. De meme que dynamic_cast s'applique à un pointeur ou une référence.
La seule solution semble etre les templates ... Je suis en train de trouver comment organiser ça simplement, pour l'instant c'est pas gagné ... Erreur durant le link :
multiple definition of `char* getClassName<A>()' |
Il n'a pas l'air d'aimer la specialisation dans un autre fichier ...
Pour l'instant, j'avais ça :
Object.hpp
class Object {
};
template<class T> char* getClassName() { return NULL; } |
ObjectA.hpp
#include "Object.hpp"
class A : public Object {
};
template<> char* getClassName<A>() { return "A"; } |
Il semblerait que je doive réorganiser en ...
Object.hpp
ObjectA.hpp
#include "Object.hpp"
class A : public Object {
}; |
ObjectName.tpp
template<class T> char* getClassName() { return NULL; }
class A;
template<> char* getClassName<A>() { return "A"; } |