1. 程式人生 > >c++模板超程式設計七:型別判斷的traits類

c++模板超程式設計七:型別判斷的traits類

is_void類可以判斷模板引數的型別,使用很簡單,注意,也可以直接使用::value。

cout << std::is_void<void>::type::value << endl;
cout << std::is_void<bool>::type::value << endl;

但是實現很有趣,特化居然可以用來繼承不同的類。這裡沒有去找clang++實現程式碼,用boost程式碼代替吧。

template <typename T>
struct is_void : public false_type{};

template <>
struct is_void<void> : public true_type{};

c++11標準支援的同理還有is_pointer, is_floating_point, is_array, is_lvalue_reference, is_rvalue_reference, is_member_object_pointer, is_member_function_pointer, is_enum, is_union, is_class, is_function。實現程式碼都很簡單,這裡再展示一個:

template <typename T>
struct is_pointer : public false_type{};

template <typename T>
struct is_pointer<T*> : public true_type{};