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 :
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;
   }
};
Jusque là, tout vas bien. Mon composant utilise un tableau. Pour construire chaque colonne, il faut spécifier le type de cette colonne.
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 :
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é);
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.

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