前提是要包含头文件
1 #include <type_traits>
- 判断是否是左值引用 是否是右值引用 是否是数组 是否是一个整数 是否是一个类
1 check(1, 10); 2 int i(10); 3 int &ri(i); 4 int &&rri(i + 3); 5 //判断是否是左值引用 0不是 1是 6 cout << is_lvalue_reference<decltype(i)>::value << endl; 7 cout << is_lvalue_reference<decltype(ri)>::value << endl; 8 //判断是否是右值引用 0不是 1是 9 cout << is_rvalue_reference<decltype(rri)>::value << endl; 10 11 int a[5]; 12 int *p = a; 13 //判断是否是数组 14 cout << is_array<decltype(a)>::value << endl; 15 cout << is_array<decltype(p)>::value << endl; 16 17 int num = 10; 18 double db = 20; 19 string str1; 20 21 //判断是否是一个整数 22 cout << is_integral<decltype(num)>::value << endl; 23 cout << is_integral<decltype(db)>::value << endl; 24 //判断是否是一个类 25 cout << is_class<decltype(str1)>::value << endl;
- 判断模板数据类型是否一致
1 //判断模板数据类型是否一致 2 template<class T1,class T2> 3 void same(const T1 &t1, const T2 &t2) 4 { 5 cout << typeid(t1).name() << is_integral<T1>::value << endl; 6 //判断模板的数据类型 7 cout << is_same<T1, T2>::value << endl; 8 }
- 模板与type高级,根据类型不同选用相应的操作
1 template<typename T1,typename T2> 2 void check(const T1 &t1, const T2 &t2, 3 typename enable_if<is_same<T1, T2>::value>::type *p = nullptr) 4 { 5 cout << " " << t1 << " " << t2 << endl; 6 cout << "类型相同" << endl; 7 } 8 9 template<typename T1, typename T2> 10 void check(const T1 &t1, const T2 &t2, 11 typename enable_if<!is_same<T1, T2>::value>::type *p = nullptr) 12 { 13 cout << " " << t1 << " " << t2 << endl; 14 cout << "类型相同" << endl; 15 }