Maison >développement back-end >C++ >Pourquoi la spécialisation explicite des fonctions de modèle échoue-t-elle dans les classes de modèles sans espace de noms en C ?
Spécialisation explicite des fonctions de modèles dans les classes de modèles en C
Erreur :
Les développeurs tentent spécialiser explicitement les fonctions de modèle dans des classes de modèles sans espace de noms peut rencontrer des erreurs de compilation dans GCC. Le code suivant présente un tel problème :
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>'
Résolution :
La spécialisation explicite des fonctions membres n'est pas prise en charge dans les classes de modèles sans espace de noms. Envisagez plutôt de transférer les appels vers une fonction membre d'un type intermédiaire partiellement spécialisé :
template<class T, class Tag> struct helper { static void f(T); }; template<class T> struct helper<T, tag1> { static void f(T) {} }; template<class T> struct C { // ... template<class Tag> void foo(T t) { helper<T, Tag>::f(t); } };
Cette approche exploite la spécialisation partielle des modèles pour obtenir le comportement souhaité tout en respectant les exigences syntaxiques de GCC.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!