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