Voici un autre toy code
Grace a ce que vous m'avez appris je permet un erreur de compilation si m> n ( ligne en commentaire).
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 struct A{ int F (){ return 1; } }; template<bool ,class> struct enable_if{}; template<class T> struct enable_if<true,T>{typedef T type;}; template< class T,int n=3> struct H{ template<int m> int h () { typedef typename enable_if< m<=n ,H>::type check_type; T a; return a.F(); } }; int main() { H<A > u_a; int t = u_a.h<1>(); //t = u_a.h<6>(); return 0; }
Cependant si j essoie de rentrer la definition de enable à l interieur de la fonction h:
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 struct A{ int F (){ return 1; } }; template< class T,int n=3> struct H{ template<int m> int h () { template<bool ,class> struct enable_if{}; template<class T> struct enable_if<true,T>{typedef T type;}; typedef typename enable_if< m<=n ,H>::type check_type; T a; return a.F(); } };
Ca provoque une erreur C2951. J ai appiqué ce qui est recommandé par le message d erreur mais ca ne marche pas mieux!
Je dois certainement mal m y prendre n est ce pas?
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 struct A{ int F (){ return 1; } }; template< class T,int n=3> struct H{ template<int m> int h () { generic<bool ,class> ref struct enable_if{}; generic<class T> ref struct enable_if<true,T>{typedef T type;}; typedef typename enable_if< m<=n ,H>::type check_type; T a; return a.F(); } };
Partager