Bonjour,
Tout d'abord, j'ai peu d'espoir de trouver une solution. Voici mon problème :
J'ai un composant qui a ses propres types, référencés par une énumération, que je dois utiliser. Puis des propriétés typées :
Jusque là, tout vas bien. Mon composant utilise un tableau. Pour construire chaque colonne, il faut spécifier le type de cette colonne.
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 enum COMPO_TYPE { INT = 0, FLT, STR, DBL, NONE }; class IProperty { public: COMPO_TYPE GetCompoType() = 0; }; template<class T> struct SCOMPO_HELPER { enum { VALUE = NONE }; }; template<> struct SCOMPO_HELPER<typename int> { enum { VALUE = INT }; } template<> struct SCOMPO_HELPER<typename float> { enum { VALUE = FLT }; } template<> struct SCOMPO_HELPER<typename double> { enum { VALUE = DBL }; } template<> struct SCOMPO_HELPER<typename char*> { enum { VALUE = STR }; } template<class T> class CProperty { // des méthodes COMPO_TYPE GetCompoType() { return SCOMPO_HELPER<T>::Value; } };
Pour trouver le type de la colonne, je prends la première instance de mon type d'objet à représenter, puis je parcours ses propriétés et je fais :
Sauf qu'admettons que je n'ai encore aucun objet instancier pour pouvoir récupérer le premier, et ensuite les types de ses propriétés pour construire les colonnes du tableau, je ne peux rien faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IProperty* prop = RécupèreLaPropriété(monObjet, index); m_composant.AddColonne(prop->GetCompoType(), strLibellé);
Or, je connais le type de l'objet, et je peux récupérer des pointeurs de membres sur celui-ci, sous forme de "IProperty CUneClasse::*member".
Est-ce que je peux bidouiller un truc pour récupérer le type réel de "CUneClasse::*member", sans aucune instance, et ensuite ci possible le paramètre template ?
Au pire, je récupère le type réel, je l'instancie pour exécuter sa méthode GetCompoType() ?
Ayant lu quelques trucs sur la méta programmation, j'me dis que peut-être il y a une solution à ça ?
Merci beaucoup,
Bonne soirée
Partager