Si j'ai une classe de base:Génération d'une instance de classe dérivée à partir d'une chaîne de son nom. (C.-à-réflexion)
class Base
{
public:
virtual void Test()=0;
};
et, dans un module chargé dynamiquement (.so/dll), je mis en oeuvre une classe dérivée de celle-ci:
class SomethingFromBase : Base
{
...
};
et l'utilisateur, une fois que cette bibliothèque est chargée, demande de créer une instance de SomethingFromBase
(disons que nous obtenons le nom de cin.), et nous ne connaissons pas SomethingFromBase
(aucune façon de le faire juste if(inputstr == "SomethingFrombase") { ... }
est là un moyen de créer une instance de SomethingFromBase?
Je suis assez certain que c'est impossible en C++ (standard), mais j'espère toujours que SO me surprendra!
Si cela est possible avec l'ajout d'une bibliothèque, je voudrais encore savoir. Merci!
Editer: Voir la réponse de cdhowie. Les guides de mise en œuvre de cette technique: http://www.linuxjournal.com/article/3687?page=0,1 http://www.abstraction.net/ViewArticle.aspx?articleID=67
Oui, c'est la seule façon possible de voir cela. Vous devez maintenir une sorte de registre qui stocke chaque nouveau type et l'associe à une chaîne arbitraire. –
Ah, gentil et sensé, et pratiquement pas de frais généraux, puisque ce n'est pas une "vraie" réflexion. Truc cool. –
Yup, seul le surdébit des pointeurs de fonction. Aussi, consultez le guide que je viens d'ajouter à ma réponse. – cdhowie