在读stl里iterator_traits的源码时发现如下一段代码:

  template <class T>
  struct iterator_traits<T*> {
    typedef random_access_iterator_tag iterator_category;
    typedef T                          value_type;
    typedef ptrdiff_t                  difference_type;
    typedef T*                         pointer;
    typedef T&                         reference;
  };
当时非常诧异,不知道还有这种特化的方式.于是查看C++ primer.其中都没有提及.
最后通过google得到了结果:
原来类模板可以部分特化位引用\指针类型.例如:
// specialize for T*
template<class T>
class Compare<T*>
{
public:
    static bool IsEqual(const T* lh, const T* rh)
    {
        return Compare<T>::IsEqual(*lh, *rh);
    }
};
则可以向如下的方式使用:
// pointer
int* p1 = &i1;
int* p2 = &i2;
bool r4 = Compare<int*>::IsEqual(p1, p2);
至此,恍然大悟.
 posted on 2011-11-28 12:16  yhqruc  阅读(975)  评论(0)    收藏  举报