template et heritage de l'operateur =
Bonjour.
Histoire de jouer avec les lambda, j'ai voulue créer un système de property comme en C#
Code:
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:
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:
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:
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:
void operator = ( const T & t) {SET(t);}
Alors qu'il en hérite de la spécialisation pour le SET :koi:
Visual 2010 et mingw 4.5.2 me font le même problème.