Bonsoir à tous et toutes!
Suite à quelques idée, je souhaiterais effectuer une opération qui n'est pas par defaut autorisé par le c++, à savoir l'initialisation des structures statiques au prototypage...
Exemple de ce qu'il faut normalement faire:
(et la nous entrons dans la partie un peu plus "sale"):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class A { private: struct Test { } public: static Test myTest; } Test A::myTest; //Déclaration
Les structures vide comme celle la permettent d'executer du code à l'initialisation du programme, comme par exemple:
En évitant de parler de l'aspect "sale" du code (j'en suis parfaitement conscient, mais c'est une nécessité dans l'application que je souhaite developper), je souhaiterais pouvoir faire la même chose en déclarant directement et initialisant directement ma structure statique. Au départ j'étais parti sur un template:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class A { private: struct Test { Test() { printf("S'executera avant la premiere ligne du main()"); } }; public: static Test myTest; }; A::Test A::myTest; //Déclaration
Bien évidement, ce genre de code ne fonctionne pas, l'objet s'initialisant uniquement si le typedef est utilisé au moins une fois dans le code de l'application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 template<typename T> class _initializer { static T reference; //Objet à initialiser } template<typename T> T _initializer<T>::reference; //Déclaration de l'objet statique class A { private: struct Test { Test() { } }; public: typedef _initializer<Test>::reference _declarerPourInitialiser; //? };
Or justement ces objets, l'utilisateur ne doit pas devoir les utiliser, ils existent uniquement pour forcer le compilo à executer du code avant le main()
Quelqu'un aurait-il une idée (me suis-je bien fait comprendre au moins? )
Je repete que oui ce code est sale (pas besoin de me le dire!), et que non je ne peu pas declarer hors de ma classe quoi que ce soit
Partager