Determina se Type è un puntatore in una funzione template

Se ho una funzione template, per esempio in questo modo:

template void func(const std::vector& v) 

C’è un modo per determinare all’interno della funzione se T è un puntatore, o dovrei usare un’altra funzione template per questo, cioè:

 template void func(const std::vector& v) 

Grazie

In effetti, i modelli possono farlo con la specializzazione del modello parziale:

 template struct is_pointer { static const bool value = false; }; template struct is_pointer { static const bool value = true; }; template void func(const std::vector& v) { std::cout << "is it a pointer? " << is_pointer::value << std::endl; } 

Se nella funzione si fanno cose valide solo per i puntatori, è meglio usare il metodo di una funzione separata, dato che il compilatore controlla la funzione nel suo complesso.

Dovresti, comunque, usare boost per questo, include anche questo: http://www.boost.org/doc/libs/1_37_0/libs/type_traits/doc/html/boost_typetraits/reference/is_pointer.html

C ++ 11 ha una bella funzione di controllo puntatore integrata: std::is_pointer::value

Questo restituisce un valore bool boolean.

Da http://en.cppreference.com/w/cpp/types/is_pointer

 #include  #include  class A {}; int main() { std::cout << std::boolalpha; std::cout << std::is_pointer::value << '\n'; std::cout << std::is_pointer::value << '\n'; std::cout << std::is_pointer::value << '\n'; std::cout << std::is_pointer::value << '\n'; std::cout << std::is_pointer::value << '\n'; std::cout << std::is_pointer::value << '\n'; }