学习摘自《STL源码剖析》之Traits编程技法-STL源代码门钥。
偏特化:泛型编程中,针对泛化设计提供的特化版本。
以下示例中,提供的一个既支持迭代器也支持原生指针的特征值获取操作。
#include "stdafx.h"
#include <iostream>
using namespace std;
//自定义迭代器
template <class T>
struct MyIter
{
typedef T value_type;
MyIter(T* p=0)
: ptr(p)
{}
T& operator*() const
{
return *ptr;
}
T* ptr;
};
//迭代器类型特征泛化版
template <class I>
struct my_iterator_traits
{
typedef typename I::value_type value_type;
};
//迭代器类型特征偏特化版
//支持原生指针
template <class I>
struct my_iterator_traits<I*>
{
typedef I value_type;
};
//迭代器类型特征偏特化版
//支持point-to-const原生指针
template <class I>
struct my_iterator_traits<const I*>
{
typedef I value_type;
};
//迭代器萃取器
template <class I>
typename my_iterator_traits<I>::value_type
func(I ite)
{
return *ite;
}
int _tmain(int argc, _TCHAR* argv[])
{
MyIter<int> ite(new int(8));
cout<<func(ite)<<endl;
cout<<func(new int(7))<<endl;
return 0;
}