Extériorisation d'une fonction template d'une struct template
Bonjour, voici le Toy code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| struct Y{ static int F() { return 10;} };
template < class T >
struct R{
template <int m> int F(void);
template<> int F<2>(void){return 6+T::F(); }
};
template < class T >
template <int m> int R<T>::F(void){
return m + T::F();
}
int _tmain(int argc, _TCHAR* argv[]){
R<Y> r;
b= r.F<2>();
b= r.F<3>();
return 0;
} |
Je suis parvenu à écrire le corps générique de F hors de la struct R.
Je ne parviens à faire de même avec la specialisation m=2.
la solution suivante est un echec
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| struct Y{ static int F() { return 10;} };
template < class T >
struct R{
template <int m> int F(void);
template<> int F<2>(void);
};
template < class T >
template <int m> int R<T>::F(void){
return m + T::F();
}
template<>
template < class T >
int R<T>::F<2>(void){
return 20 + T::F();
} |
J 'ai du mal à saisir pourquoi, si vous avez une suggestion ;)