J'ai un problème que je n'arrive pas à résoudre,
j'utilise une classe pour référencé automatiquement un module grâce à son constructeur qui appelle une une fonction de référencement.
En simplifier sa donne à peu près ça :
class a : public ReferencementBaseClass
{
unsigned int ID;
unsigned int Info1...
a()
{
ID = e_ClassA ;
initialisation des autres champs ;
Referenceur::Reference(this)
}
}
Pour appeler le constructeur de cette classe j'utilise une global déclaré dans le même fichier .cpp.
a variableClassA;
Le problème est que cette global référencé à aucun autre endroit du code est tout simplement dégagé au moment du link et par conséquent le constructeur n'est pas appelé est mes données inclus dans la classe a ne sont pas référencé par ma classe Referenceur.
Il me faudrait une méthode pour forcer le linker à conserver la référence et donc faire l'initialisation de la global en début de programme. Pour conserver la souplesse que cela apporte (il suffit d'un fichier pour référencé un nouveau type d'objet) il faudrait que la méthode puisse être écrite dans le .cpp lui même, style __decl_spec(link) ou #pragma link.
Je n'est malheuresement pu trouver de solution viable à ma situation, quelqu'un aurait-il une solution à ce problème.
NB : le problème vient à mon avis du compilateur de visual 6 qui devrait vérifier de lui même si le constructeur ne contient pas d'appel extérieur à la classe avant de retirer toute référence à cette variable global.
NB2 : bien entendu l'utilité de ce référencement n'est valable que dès lors où l'on possède un nombre important et variable d'objet à référencer, il a l'avantage de ne nécessité aucun ajout d'une quelconque variable dans le module du référenceur.
Partager