2009-09-11 6 views
6

En tant que suivi this question: Je dois décider dans une fonction de classe comme ceci:Fonction de classe modélisée T: Comment savoir si T est un pointeur?

template< typename T > bool Class::Fun <T*> (T& variable) {...} 

si T est un pointeur ou non.

Dans la question citée ci-dessus, la réponse consistait à utiliser une spécialisation de modèle partielle. Pour autant que j'ai découvert ce n'est pas possible pour les fonctions de classe. Est-ce vrai? Si oui, existe-t-il un autre moyen de savoir si T est un pointeur?

+1

@iammilind: Vous remarquerez que la question déjà liée à la question que vous avez marqué un double et de il a déjà été dit là en quoi il est différent. S'il vous plaît supprimer le "marqué comme doublon". – fuenfundachtzig

Répondre

22

Pas besoin de spécialiser la fonction membre. Dans cette réponse utilisé structure autonome. Vous êtes toujours libre de l'utiliser dans les fonctions des membres de la classe.

// stand-alone helper struct 
template<typename T> 
struct is_pointer { static const bool value = false; };  
template<typename T> 
struct is_pointer<T*> { static const bool value = true; }; 

// your class 
class Class{ 
public: 
template<typename T> 
void Fun(T& variable) { 
    std::cout << "is it a pointer? " << is_pointer<T>::value << std::endl; 
} 
}; 

D'un autre côté, vous pourriez surcharge fonction:

class Class { 
public: 
template<typename T> 
void Fun(T& variable) { 
    std::cout << "is it not a pointer! " << std::endl; 
} 
template<typename T> 
void Fun(T*& variable) { 
    std::cout << "is it a pointer! " << std::endl; 
} 
}; 
+2

Vous avez montré deux très bons moyens d'y parvenir. Malheureusement, je n'ai qu'un seul vote à vous donner. ':)' – sbi

+0

Merci pour les éloges, mais je dirais que j'ai montré des moyens habituels/standard pour y parvenir. –

+2

Cela ne veut pas dire qu'ils ne peuvent pas être très bons. ':)' – sbi

Questions connexes