J'ai le code qui fonctionne dans VC9 (Microsoft Visual C++ 2008 SP1) mais pas dans GCC 4.2 (sur Mac):Syntaxe C++ pour la spécialisation explicite d'une fonction de modèle dans une classe de modèle?
struct tag {};
template< typename T >
struct C
{
template< typename Tag >
void f(T); // declaration only
template<>
inline void f<tag>(T) {} // ERROR: explicit specialization in
}; // non-namespace scope 'structC<T>'
Je comprends que GCC voudrait que je déplacer ma spécialisation explicite en dehors de la classe, mais je ne peut pas comprendre la syntaxe. Des idées?
// the following is not correct syntax, what is?
template< typename T >
template<>
inline void C<T>::f<tag>(T) {}
Ceci est similaire à la solution que j'utilise, merci! Je me demande s'il existe un moyen de le faire de façon moins verbeuse en utilisant Boost? – jwfearn
Pas vraiment, ça ne devient pas plus facile en général. Vous avez besoin d'une fonction d'assistance pour éviter que * "la classe englobante doive être explicitement spécialisée" * et vous devez déplacer celle-ci dans une classe pour faire une spécialisation partielle. –