ignorer cela, j'ai pensé à une solution de contournement impliquant la génération d'en-tête. Ce n'est pas la meilleure solution, mais cela fonctionne. Cette question est étrange à comprendre. Fondamentalement, je veux appeler une fonction virtuelle qui n'a pas été déclarée dans la lib ou dll et l'utiliser comme normal (mais ne l'a pas mis en œuvre/vide func).étendre une classe de base abstraite sans recompilation de source?
J'ai une classe de base abstraite dans ma bibliothèque. Tous mes plugins en héritent, le plugin utilisateur hérite de cette classe et son application utilise cette classe comme un pointeur de plugin. Je veux que cet utilisateur puisse étendre la classe et ajouter ses fonctions. Le problème est, je suis sûr que s'il ajoute une fonction virtuelle et essaie de l'appeler, le code va planter en raison de mes objets n'ayant pas les données supplémentaires dans son vtable. Comment puis-je contourner cela? J'ai pensé en hériter, mais cela entraînerait de vilains problèmes lorsqu'un troisième utilisateur vient jouer. Je ne veux pas qu'il soit catalogué pour envoyer les fonctions étendues.
Je pensais à une fonction msg comme intptr_t sendMsg (enum msgName, void * argv); Mais cela supprime le safty et je devrais tout typer. Quelle est la meilleure solution pour cela? Je préfère utiliser vtables, puis utiliser une fonction sendMsg. Comment puis-je contourner cela?
pouvez-vous poster du code? – cbrulak
Peut-être ai-je mal compris la question, mais je penserais que tant que la classe dérivée est correctement instanciée, elle ne tomberait pas en panne. Pourriez-vous élaborer? – codelogic
Si son code est celui à "nouveau" de sa classe, cela fonctionnera bien. (Bien que, comme codelogic, peut-être que je ne "reçois" pas la question.) –