Membre object statique dans classe template : souci - C++ - Programmation
Marsh Posté le 28-11-2015 à 17:59:51
bonjour !
De mémoire, il me semble que, dans le cas des templates, seules les méthodes (et donc, a priori les membres statiques) qui sont réellement utilisés dans le code généré sont effectivement compilés, ce qui correspond à votre analyse (et au résultat !)
On s'en rend compte quand on découvre des erreurs de syntaxe dans la classe template au fur et à mesure qu'on en utilise les méthodes, au lieu de les découvrir dès la première utilisation de la classe.
Bonne continuation !
Marsh Posté le 30-11-2015 à 16:57:13
merci beaucoup pour ta reponse
du coup je n'ai pas trouvé d'autre solution que de mettre la variable static en privé dans le template, de la redeclarer dans la classe derivant d'une instatiation de ce template, et de la definir dans le .cpp de celle ci
sur ce coup la plus de souci , et ce qui m'evite de devoir appeler une methode agissant sur cette variable
Marsh Posté le 27-11-2015 à 15:07:03
Bonjour,
j'ai un souci de C++.
je cherche a resoudre un probleme d'initialisation, car le constructeur d'un objet membre statique d'une classe template que j'ai definie n'est jamais appelé.
J'ai reproduit mon probleme sur un test case tres simple :
Voici la classe de test :
simple_class.hpp
simple_class.cpp:
Ma classe template est template_test.hpp:
Comme on peut le voir, je declare un objet de la classe simple_class comme membre statique de ma classe template et je le definis en dehors de la declaration de la classe template.
Je m'attends a ce que ceci suffise pour que le constructeur de simple_class soit appelé avant le main, l'objet etant statique, et m'affiche le message de son constructeur.
J'instancie le template a l'aide d'une classe derivee :
concrete_test.cpp
le display est defini dans concrete_test.cpp ..
enfin le main donne :
Il se trouve que si je laisse la ligne (*) en commentaire, le constructeur de mon objet statique n'est jamais appelé :
./test
TEST PROGRAM
concrete static id is 1
mais si je la decommente :
./test
SIMPLE CLASS CONSTRUCTOR with integer id: 0
TEST PROGRAM
concrete static id is 1
concrete static simple class id is 0
Est ce que quelqu'un peut m'aider a comprendre ce qu'il se passe avec mon objet statique ? pourquoi n'est il pas traite de la meme maniere que le membre statique integer de la meme classe template ?
faut il necessairement faire un appel de methode traitant l'objet statique pour que celui ci soit initialisé ?
Merci
Message édité par iVador le 27-11-2015 à 15:08:41