1.type traits使用
http://www.cplusplus.com/reference/type_traits/
#include <iostream>
#include <typeinfo>
using namespace std;
template<typename T>
void type_traits_output(const T& x) {
cout << "\ntye traits for type : " << typeid(T).name() << endl;
cout << "is_void\t" << is_void<T>::value << endl;
cout << "is_integral\t" << is_integral<T>::value << endl;
cout << "is_arithmetic\t" << is_arithmetic<T>::value << endl;
}
int main() {
type_traits_output(5);
type_traits_output(string());
return 0;
}
2.type traits实现
(1)通过模板偏特化实现
//remove_const
template<typename _Tp>
struct remove_const {
typedef _Tp type;
};
template<typename _Tp>
struct remove_const<_Tp const> {
typedef _Tp type;
};
//remove_volatile
template<typename _Tp>
struct remove_volatile {
typedef _Tp type;
};
template<typename _Tp>
struct remove_volatile<_Tp volatile> {
typedef _Tp type;
};
//remove_cv
template<typename _Tp>
struct remove_cv {
typedef typename
remove_const<typename remove_volatile<_Tp>::type>::type type;
};
template<typename>
struct __is_void_helper : public false_type {
};
template<typename>
struct __is_void_helper : public true_type {
};
template<typename _Tp>
struct is_void : public __is_void_helper<typename remove_cv<_Tp>::type>::type {
};
(2)通过编译器实现