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:

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
(et la nous entrons dans la partie un peu plus "sale"):
Les structures vide comme celle la permettent d'executer du code à l'initialisation du programme, comme par exemple:

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
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
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; //?
};
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.
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