64,680
社区成员
发帖
与我相关
我的任务
分享
template <class T>
struct MyIter {
typedef T value_type;
T* ptr;
MyIter(T* p = 0) : ptr(p) {}
T const & operator*() const { return *ptr; }
};
template <class T>
struct MyTraits { //page 87 页的版本
typedef typename T::value_type value_type;
};
template<class T> //这个是我自己写的
struct MyTraits<T*> //解决原生指针
{
typedef typename T::value_type value_type;
};
/*
page 88页 提供 MyTraits<T*>的 特化版本如下:
template<class T>
struct MyTraits<T*>
{
typedef typename T value_type;
};
另外还有这么一段文字:于是,原生指针int* 虽然不是一种class type, 亦可透过traits取其value type.........
问题在于: 我提供的traits的特化版本和作者的不一样, 为什么作者会这样写? 当使用一个MyTraits的使用,类型肯定是迭代器MyIter进行匹配,
,另外MyIter中定义了类型,那么 我的应该没有错啊。
*/
//多一层次的traits
template<class T>
typename MyTraits<T>::value_type TestFunc( T iter)
{
return *iter;
}
template <class T>
struct MyIter {
typedef T value_type;
T* ptr;
MyIter(T* p = 0) : ptr(p) {}
T const & operator*() const { return *ptr; }
};
template <class T>
struct MyTraits {
typedef typename T::value_type value_type;
};
template<class T>
struct MyTraits<T*> //解决原生指针
{
typedef T value_type;
};
//多一层次的traits
template<class T>
typename MyTraits<T>::value_type TestFunc( T iter)
{
return *iter;
}
int main()
{
int* p= new int(200);
MyTraits<int*>::value_type iter2= TestFunc(p); // 解决原生指针
int data=20;
MyIter<int> iter3(&data);
MyTraits<MyIter<int>>::value_type iter4=TestFunc(iter3);
return 0;
}