2015-08-02 14 views
7

Dopo aver visto che un modello può essere parzialmente specializzato per i tipi di riferimento o puntatore, mi chiedevo se posso scrivere un modello che accetta solo un tipo di puntatore con cui iniziare. Questo è il mio tentativo:Un modello che accetta solo argomenti tipo puntatore

template <typename T*> 
struct MyTemplate{}; 

int main() { 
    MyTemplate<int *> c; 
    (void)c; 
    return 0; 
} 

Questo non viene compilato. Come dovrebbe essere modificato? (Cioè se quello che sto cercando di realizzare è a tutto il possibile)

+0

Controllare [ 'std :: is_pointer'] (http://en.cppreference.com/w/cpp/types). –

risposta

12

È possibile utilizzare la specializzazione parziale:

template <typename T> struct MyTemplate; // Declaration 

template <typename T> struct MyTemplate<T*> // Specialization 
{ 
}; 

o utilizzare static_assert

template <typename T> struct MyTemplate 
{ 
    static_assert(std::is_pointer<T>::value, "Expected a pointer"); 

    // T = value_type* 
    using value_type = std::remove_pointer_t<T>; 
}; 
Problemi correlati