CG@CPPBLOG

/*=========================================*/
随笔 - 76, 文章 - 39, 评论 - 137, 引用 - 0
数据加载中……

《C++设计新思维》读书笔记(14)

2.10.1 实作出Pointer Traits

大部分type traits的实作都依赖全特化或偏特化。下面代码用来判断型别T是否为指针:

 1 template<typename T>
 2 class TypeTraits
 3 {
 4 private:
 5     template<class U> struct PointerTraits
 6     {
 7         enum { result = false };
 8         typedef NullType PointeeType;
 9     };
10     template<class U> struct PointerTraits<U*>
11     {
12         enum { result = true };
13         typedef U PointeeType;
14     };
15 public:
16     enum { isPointer = PointerTraits<T>::result };
17     typedef PointerTraits<T>::Pointeetype PointeeType;
18 };


对于一个指针型别,
PointerTraits的偏特化版本更适合。所以对于一个非指针型别,resultfalse,所谓被指型别PointeeType不能拿来使用,只是一个不能被使用的占位型别(placeholder type)。

对于指向成员函数的指针,我们需要这样做:

 1 template<typename T>
 2 class TypeTraits
 3 {
 4 private:
 5     template <class U> struct PToMTraits
 6     {
 7         enum{result = false};
 8     };
 9     template <class U, class V>
10     struct PToMTraits<U, V::*>
11     {
12         enum {reulst = true };
13     }
14 public:
15     enum { isMemberPointer = PToMTraits<T>::result};
16 };
17 

posted on 2007-12-24 21:55 cuigang 阅读(430) 评论(0)  编辑 收藏 引用 所属分类: 《C++设计新思维》读书笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理