stl源码剖析一书上的 traits的特化版本的疑问

bsnry bsnry 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题:照着书上写了一个简单的traits, 发现作者提供的特化版本理解不了。


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;
}



...全文

相关推荐

STL源码剖析pdf及源码.zip

STL的实现基于泛型编程,利用模板机制实现了高度抽象和代码复用,大大提高了C++程序员的生产力。《STL源码剖析》这本书的PDF版本包含了清晰的扫描和完整的目录结构,方便读者快速定位所需内容。

jsnjjnzx

C++ STL 源码剖析之 Traits 编程技法

C++ STL 源码剖析之 Traits 编程技法导语template 参数推导声明内嵌型别救世主 Traits函数偏特化加入中间层总结 导语 在 STL 编程中,容器和算法是独立设计的,即数据结构和算法是独立设计的,连接容器和算法的桥梁就是迭代器了,迭代器使其独立设计成为可能。如下图所示: 上图给出了 STL 的目标就是要把数据和算法分开,分别对其进行设计,之后通过一种名为 iterator 的东西,把这二者再粘接到一起。 设计模式中,关于 iterator 的描述为:一种能够顺序访问容器中每个元素的方法

源代码大师

STL源码剖析

侯捷所著《STL源码剖析》深入探讨了SGI STL的内部实现,包括数据结构和算法的源码分析,以及内存管理和traits机制。本书适合有C++和STL基础的读者,旨在揭示STL组件的设计原理和内部机制。

Mr^_^Soong

STL源码剖析,要看,必须看

侯捷先生的《STL源码剖析》是一本深入理解STL内部机制的经典著作,对于任何希望提升C++编程技能,特别是对STL有深入研究的开发者来说,这是一本必读的书籍。

llmwm

STL 源码剖析pdf 高清版(非扫描)

《STL源码剖析》是一本深入理解STL内部机制的经典著作,高清版的非扫描PDF格式使得阅读体验更加舒适,方便开发者查阅和学习。本书主要涵盖以下几个关键知识点:1.

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