type_traits
来源:互联网 发布:基于内容的推荐算法 编辑:程序博客网 时间:2024/05/23 01:56
#include <iostream>namespace namespace269 { /** 2两个空白类,没有任何成员,不会带来额外负担,却能通过类型代表真假,可以用于函数特化参数 */ struct __true_type { }; struct __false_type { }; template <class _Tp> struct __type_traits { typedef __true_type this_dummy_member_must_be_first; typedef __false_type has_trivial_default_constructor; typedef __false_type has_trivial_copy_constructor; typedef __false_type has_trivial_assignment_operator; typedef __false_type has_trivial_destructor; typedef __false_type is_POD_type; };}template <class T>void test_tpye_traits(T& t, namespace269::__true_type) { std::cout << "true" << std::endl;}template <class T>void test_tpye_traits(T& t, namespace269::__false_type) { std::cout << "false" << std::endl;}template <typename T>void test_tpye_traits(T& t) { typedef typename namespace269::__type_traits<T>::is_POD_type is_POD_type; test_tpye_traits(t, typename namespace269::__type_traits<T>::is_POD_type());}class A {public:};class B {};namespace namespace269 { template <> struct __type_traits<A> { typedef __true_type is_POD_type; }; template <> struct __type_traits<B> { typedef __false_type is_POD_type; };}int main(void) { A a; B b; test_tpye_traits(a); // true test_tpye_traits(b); // false return 0;}