解决原生指针后,为什么还要引入traits?

bsnry bsnry 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
对萃取这块很 迷糊。 不知道为什么要引入它。 看了一篇网文。

网文的作者没有 说 引入萃取的原因,只是一来就提供了一个关于迭代器的例子

(MyIter支持原生指针)

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 MyIter<T*>
{
typedef T value_type;
T* ptr;
MyIter(T* p=0):ptr(p){}
T const & operator*() const { return *ptr; }
};

//使用迭代器的一个函数,获得迭代器所指的对象。
template<class I>
typename I::value_type TestFunc( I iter)
{
return *iter;
}




接着作者,又提供了类iterator_traits :

template <class I>
struct iterator_traits {
Typedef I::value_type value_type;
}
template <class T>
struct iterator_traits<T*> {
typedef T value_type;
};


不懂 ,为什么要引入 iterator_traits 呢?? MyIter 已经可以解决 原生指针的问题,引入iterator_traits 干嘛啊。


...全文

相关推荐

评论 12
收藏 已收藏
分享
返回顶部
bsnry
C++ 语言 65,214 成员 250,514 内容