1 2 3 4 5 6 7
| template<class S>
struct AA
{
int f( int) { return -1; }
};
struct BB{}; |
Jusque là, tout va bien.
1 2 3 4 5
| template<int n=3>
struct CC{};
template<>
int AA<BB>::f(int){ return 0; } |
Tu spéciales juste une méthode de ta classe template, alors que tu devrais spécialiser TOUTE ta classe template. Si c'est juste la méthode qui doit changer selon le paramètre template, c'est la méthode que tu dois rendre template.
1 2
| template<>
int AA< template<int> CC >::f(int){ return 2; } |
Et là je commence à penser que tu mets de la mauvaise volonté. C'est la même chose que juste avant, sauf que comme AA attend un type en paramètre template, et non pas une "fonction de type" (un template, quoi), tu ne peux donner CC just for fun. CC est une "fonction de type" qui à un nombre (le paramètre n) associe un type. Si tu veux un type à l'arrivée, il faut lui donner un nombre. Donc tu pourrais éventuellement spécialiser ta classe AA pour CC<42> ou autre.
int _tmain(int argc, _TCHAR* argv[])
_tmain n'est absolument pas standard, ni _TCHAR*. Ton code ne compilera pas sur d'autres compilos, et peut-être plus dans des versions suivantes de ton compilo actuel qui se déciderait à suivre la norme.
Partager