2009-09-11 10 views
6

Come follow-up a this question: Ho bisogno di decidere in una funzione di classe come questo:Funzione di classe basata sui modelli T: Come scoprire se T è un puntatore?

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

se T è un puntatore o meno.

Nella domanda sopra citata, la risposta era utilizzare la specializzazione del modello parziale. Per quanto ho scoperto, questo non è possibile per le funzioni di classe. È vero? Se è così, c'è un altro modo per scoprire se T è un puntatore?

+1

@iammilind: Avrete notato che la questione già legata alla domanda che hai segnato un duplicato di e che inoltre è stato già indicato lì in che modo è diverso. Si prega di rimuovere il "contrassegnato come duplicato". – fuenfundachtzig

risposta

22

Non è necessario specializzare la funzione membro. In quella risposta si utilizzava la struttura autonoma. Sei ancora libero di usarlo nelle funzioni dei membri della 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'altra parte, si potrebbe sovraccarico funzione:

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

Hai mostrato due ottimi modi per riuscirci. Purtroppo ho solo un voto da darti. ':' – sbi

+0

Grazie per la lode, ma direi che ho mostrato i modi usuali/standard per raggiungere questo obiettivo. –

+2

Ciò non significa che non possano essere molto buoni. ':)' – sbi

Problemi correlati