编译期根据型别作判断的泛型技术
template <typename T >
class TypeTraits
{
private :
template <class U> struct PointerTraits
{
enum{result = false};
typedef NullType PointeeType;
}
template <class U> struct PointerTraits<U *>
{
enum {
result =true;
typedef U PointeeType;
}
public:
enum{isPointer = PointerTraits<T>::result};
typedef PointerTraits<T>::PointeeType PointeeType;
}
}
如下std::vector::iterator实做内容
int main()
{
const bool
iterIsPtr = TypeTraits<vector<int>::itorator>::isPointer;
cout <<"vector<int>::iterator is"<<iterIsPtr?"fast":"smart"<<'\n'
}
侦测Pointers to members
template <typename T>
class TypeTraits
{
private:
template<class U>struct PToMraits
{
enum {result=false;}
}
template<class U ,class V>
struct PToMTraits<U V::*>
{
enum{result = true};
}
public :
enum{
isMemberPointer = PToMTraits<T>::result};
}
}
侦测基本型别方法
IndexOf
优化参数型别
referencedType 和 isPrimitive
卸除饰词const与Volatile
template <typename T>
class TypeTraits
{
private:
template<class U>struct UnConst
{
typedef U Result;
}
template <class U >struct UnConst<const U>
{
typedef U result;
}
public :
typedef UnConst<T>::Result NonConstType;
}
总结:基本结合了C++ 与 template ,通过Int2Type<>方式,实现了如上许多的功能,其主要作用在编译期实现功能,语法难度更深层次。