在读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
浙公网安备 33010602011771号