学习STL过程中的一些零散记录4

原创 2015年07月09日 00:37:38

Traits编程技法:

1.要识别迭代器所指对象的类型,即所谓迭代器的value_type,可用模板参数推导机制推导出,但有其局限性,如无法推导出函数的返回值类型。

2.更好的方法是声明内嵌类型,如:

template<class T>

struct MyIter{

typedef T value_type;

T* ptr;

MyIter(T* p=0):prt(p){};

T& operator * () const {return *ptr;};

}


template<class I>

typename I::value_type//返回值类型,必须加typename,因为I::value_type是一个模板参数,在他被编译器具现化前编译器对他一无所知,typename告诉编译器这//是一个类型

func(I iter){

retrun *iter;

}


int main(){

MyIter<int> iter(new int(8));

func(iter);

retrun 0;

}

这里有一个隐晦的陷阱:并不是所有的迭代器都是class type的,如原始指针就不是。不是class type那么我们就不能使用声明内嵌类型了;

3.模板偏特化的意义:

a.偏特化的定义:针对(任何)模板参数更进一步的条件限制所设计出的一个特化版本,如template<class T> class AA{...};的一个特化版本template<class T> classAA<T*> {...}; 

b.萃取迭代器的特性,如下面这个类模板专门用来萃取迭代器的特性:

template<class I>

struct iterator_traits{

typedef typename I::value_type value_type;

};

所谓萃取是指如果I定义有自己的value_type,则这个类模板萃取出的value_type就是I的value_type。

c.iterator_traits通过偏特化萃取原始指针的类型:

template<class T>

struct iterator_traits<T*>{

typedef T value_type;

}



相关文章推荐

C++学习过程中的补遗的零散知识点(1)

class X;class Y{ X obj;}; class X{private: Y *ptr;};这段代码为什么通不过啊?  因为编码器在读到X obj;时还不知道X的大小,无法为class Y...
  • inthat
  • inthat
  • 2011年07月29日 16:14
  • 505

学习MongoDB过程中零散的知识

以下内容由 http://database.51cto.com/art/201012/241103.htm 提取并加入自己的理解而成,并且本文不定期更新。感谢原po. 【51CT0经典译文】我之所...

数据库设计过程遇到的零散点记录powerdesigner 数据库设计 表设计

项目中数据库问题点记录 powerdesigner 使用

VC的CMap类和STL的map的使用及使用过程中遇到的错误

VC的CMap类和STL的map的使用及使用过程中遇到的错误 1、CMap类:映射表类(CMap)是MFC集合类中的一个模板类,它是对Hash表的一种实现,也称作为“字典”,就像一种只有两列的表格,一...

【学习记录】使用Github过程中出现的问题及解决办法

今天想把之前数据库课设的代码上传Github,不想上传过程中出现了许多error,于是就查了下资料。解决之后写个备忘录好了~ 首先在git上建立一个项目,这个我就照抄教程好了: 1.在git创建项...

JavaScript学习过程中小知识记录

javascript小知识汇总

hadoop学习过程中遇到的问题记录

hadoop搭建、学习过程中遇到的问题。持续更新。 系统centos 32位。 hadoop2.2.0 x86_64 eclipse安装在centos中。master机器上...

学习使用Jpcap抓取数据包过程中的一些记录和问题

1.      Jpcap        Jpcap是一个基于Java主要用来捕获网络数据包并进行处理的中间件,通过调用外部动态链接库(Windows下.dll, Linux下 .so)的形式弥...

最近学习过程中遇到的问题,记录一下

A Java Runtime Environment(JRE) or java Development Kit(JDK) must be available in order to run Myecl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习STL过程中的一些零散记录4
举报原因:
原因补充:

(最多只允许输入30个字)