C++ traits两种用途
1. 利用编译器为自己约束程序行为。
//拒绝使用double的traits,完全特化
template<class T>
struct type_restrict
{
enum{value};
};
template<>
struct type_restrict<double>{};
2. 指针引用与值分离,准确获取所需类型。
//部分特化
template<class T>
struct type_traits
{
typedef T value_type;
typedef T* pointer_type;
typedef T& reference_type;
//const...
};
template<class T>
struct typed_tratis<T*>
{
typedef T value_type;
typedef T* pointer_type;
typedef T& reference_type;
//const...
};
//T&/const/void ...