Determine si Tipo es un puntero en una función de plantilla

Si tengo una función de plantilla, por ejemplo, como esta:

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

¿Hay alguna manera de que pueda determinar dentro de la función si T es un puntero, o tendré que usar otra función de plantilla para esto, es decir:

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

Gracias

De hecho, las plantillas pueden hacer eso, con la especialización de plantilla parcial:

 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; } 

Si en la función haces cosas solo válidas para los punteros, es mejor utilizar el método de una función separada, ya que el comstackdor revisa la función como un todo.

Sin embargo, debe utilizar el impulso para esto, esto también incluye: http://www.boost.org/doc/libs/1_37_0/libs/type_traits/doc/html/boost_typetraits/reference/is_pointer.html

C ++ 11 tiene una pequeña función de comprobación de puntero incorporada: std::is_pointer::value

Esto devuelve un valor de booleano bool .

De 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'; }