Bonjour,
j'ai un petit soucis avec un warning :
J'ai créer un système de plugin, ou je crée des classes depuis des librairies dynamiques.ISO C++ forbids casting between pointer-to-function and pointer-to-object
Le code (sans la gestion des exceptions) :
Et la définition de la méthode create :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 handle = dlopen(_path.c_str(), RTLD_LAZY); create_t* createPlg = (create_t*) dlsym(handle, "create"); // Le warning est ici. PlgAbstract* newPlg = createPlg();
Et chacun de mes plugins hérite de PlgAbstract.
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef PlgAbstract* create_t();
Je comprend que je crée une fonction à partir d'un symbole qui représente une classe. Mais comment faire le cast entre les deux reste pour moi un mystère.
p.s. Le code est fonctionnel, mais j'ai lu qu'il peut y avoir une différence de taille entre l'objet et la fonction que je crée.
Partager