如果我有模板功能,例如:
templatevoid func(const std::vector & v)
有什么方法可以在函数中确定T是否是指针,或者我是否必须使用另一个模板函数,即:
templatevoid func(const std::vector & v)
谢谢
实际上,模板可以做到这一点,部分模板专业化:
templatestruct 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; }
如果在函数中你做的事情只对指针有效,你最好使用单独函数的方法,因为编译器类型 - 检查函数整体.
但是,您应该使用boost,它也包括:http://www.boost.org/doc/libs/1_37_0/libs/type_traits/doc/html/boost_typetraits/reference/is_pointer.html
C++ 11内置了一个很好的小指针检查功能: std::is_pointer
这返回一个布尔bool
值.
来自 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'; }