Bonjour.
Histoire de jouer avec les lambda, j'ai voulue créer un système de property comme en C#

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
enum PropertyAccess
{
   G = 1,
   S = 2,
   G_S
 
};
 
template<typename T,PropertyAccess pa = G_S>
struct Property
{
private :
//interdit la copie
        Property<T,pa> & operator=(const Property<T,pa> & );
};
spécialisation pour le GET
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
template<typename T>
struct Property<T,G>
{
    std::function< T ()> GET;
    operator T () {return GET();};
};
spécialisation pour le SET
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
template<typename T>
struct Property< T,S>
{
     std::function< void ( const  T &)> SET;
     void operator = ( const  T & t) {SET(t);}
};
spécialisation pour le GET et le SET qui me pose problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
template<typename T>
struct Property<typename T,G_S>
    : public Property< typename T,S>, Property<typename T,G>
{
};
Pour que le compilateur trouve l'operateur = je doit réécrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
void operator = ( const  T & t) {SET(t);}
Alors qu'il en hérite de la spécialisation pour le SET
Visual 2010 et mingw 4.5.2 me font le même problème.