2009-08-18 5 views
11

I ont une fonction de modèle:Fonction spécialisation de modèle avec référence à pointeur

template<typename T> 
void foo(const T& value) { bar(value); x = -1; } 

Je veux me spécialiser pour un ensemble de types:

template<> 
void foo<char>(const char& value) { bar(value); x = 0; } 
template<> 
void foo<unsigned char>(const unsigned char& value) { bar(value); x = 1; } 

Il fonctionne bien. Quand je compile ceci:

template<> 
void foo<char*>(const char*& value) { bar(value); x = 2; } 

Je reçois une erreur:

error C2912: explicit specialization; 'void foo(const char *&)' is not a specialization of a function template 

Est-il possible de se spécialiser avec char* paramètre de type pointeur sans typedef'ing il?

Répondre

20

Bien sûr. Essayez ceci:

template<> 
void foo<char*>(char* const& value) {...} 

Ceci est parce que const char* signifie pointeur vers const char, pas un pointeur const à char.

+0

Vous pourriez également faire ceci, non? 'template <> void foo (const char * const & valeur) {...}' Ce type d'approche fonctionne pour moi, même si je ne suis pas trouver nécessaire de préciser '' après 'foo'. – Alan

3

Vous devriez généralement éviter les spécialisations de modèle de fonction: vous aurez beaucoup moins de problèmes si vous fournissez des surcharges non-template à la place. En savoir plus: Why Not Specialize Function Templates?

+0

Oui, redessiné pour utiliser la surcharge après l'avoir réalisé moi-même. – pingw33n

Questions connexes