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é:
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();
}
L'erreur:
Citation Envoyé par compilateur
error C2039: 'Type_2' : is not a member of 'MaPolitique1'
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ù aller
Merci