Salut.
En fait je voudrais faire ceci : remplacer du code source en compilation dans différent fichiers à l'aide d'une macro, par exemple j'ai ce fichier ici que j'appelle code.h
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include "serializer.h" #define THECODE(CLASSNAME, BASE, DERIVED...) \ struct CLASSNAME : public Serializer<BASE, DERIVED> { \ //Définition ici. }; \ CLASSNAME obj
Et ce fichier ci que je vais appeler implémentation.h
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include "code.h" #ifndef KEY #define KEY GETCODE(DEFAULTNAME, DEFAULTBASE, DEFAULTDERIVED) #endif class EClass { //Défintion de la classe ici. KEY };
Et je veux inclure le code qui se trouve dans le fichier code.h, dans la classe du fichier implementation.h afin que EClass contienne l'implémentation de la classe et un objet de la classe dans la macro.
Ce code est dans une bibliothèque et je donne des paramètres par défaut à la macro pour définir le code à générer au cas ou la macro n'est pas redéfinie en dehors de la librairie.
Jusque là pas de problème.
Le problème survient ici :
Je possède une troisième classe qui utilise pointeur sur un objet de type EClass comme ceci : (Cet objet est une entité graphique que je veux dessiner et EClass n'est rien d'autre qu'un pointeur vers un volume de collision)
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class DClass { public : //Definition de la classe ici. EClass* ptr; };
Le problème est que lorsque je veux redéfinir la macro qui inclue le code généré en compilation en dehors de la bibliothèque, j'ai un crash lors du dessin et le pointeur sur l'objet EClass est modifié. (c'est à dire que, par exemple, si il était null, celui-ci contient une adresse)
Je pense que c'est parce que le code du fichier.h de la bibliothèque, ne correspond plus avec le code contenu dans le fichier .a de la bibliothèque.
Bref je ne vois pas très bien ce que je devrais faire pour régler le problème à part peut être faire une bibliothèque "header only". ?
Mais je ne suis pas sûr que ça va fonctionner.
Partager