Bonsoir,
Je voudrais conditionner des variables suivant des types existants ou non dans une politique. Comme un exemple vaut mieux qu'un long discours, voilà ce que j'ai tenté:
L'erreur:
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 #include <boost/type_traits.hpp> #include <boost/mpl/if.hpp> // Premiere politique avec un seul type: struct MaPolitique1 { typedef int Type_1; }; // Seconde politique avec deux types: struct MaPolitique2 { typedef int Type_1; typedef int Type_2; }; // Ma classe: template<typename PolitiqueT> class A { public: // si la politique contient Type_1, alors je défini un membre Type_1 (sinon un void* en attendant mieux): typename boost::mpl::if_< boost::is_class<typename PolitiqueT::Type_1> ,typename PolitiqueT::Type_1 ,void* >::type m_Membre1; // si la politique contient Type_2, alors je défini un membre Type_2 (sinon un void* en attendant mieux): typename boost::mpl::if_< boost::is_class<typename PolitiqueT::Type_2> ,typename PolitiqueT::Type_2 ,void* >::type m_Membre2; }; int main(void) { A<MaPolitique1> a1;// bien sûr, ça ne compile pas car MaPolitique1::Type_2 n'existe pas. A<MaPolitique2> a2; return std::cin.get(); }
Quelqu'un aurait une idée sur la voie à suivre? Je pense être sur une mauvaise voie, et je ne sais pas trop vers où allerEnvoyé par compilateur
Merci
Partager