学习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;

}



记录学习的点滴(Spring注解学习过程中问题总结)

1,通过@PathVariable接收数据的乱码问题 设置服务器的编码可以解决,对于Tomcat,只需要修改conf/server.xml文件,添加URIEncoding="UTF-8"即可...
  • u012156769
  • u012156769
  • 2016年09月19日 16:08
  • 159

学习MongoDB过程中零散的知识

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

Java零散知识点学习记录

1.label标签:标签结合continue和break使用,表示跳至标签所指示的位置继续执行代码。常见在嵌套循环中,if判断后跳过某些语句等。2.方法的重载是不能通过返回值的不同来实现的,虽然可以通...
  • Face3
  • Face3
  • 2015年11月20日 16:39
  • 329

Android 学习记录-零散知识点

同一个应用程序中的Activity切换通常一个应用程序中需要多个UI 屏幕,也就需要多个Activity 类,并且在这些 Activity 之间进行切换,这种切换就是通过 Intent 机制来实现的。...
  • shanantong
  • shanantong
  • 2016年04月16日 12:01
  • 206

学习STL map, STL set之数据结构基础

STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构。 C++ STL 之所以得到广泛的赞誉,也被很多人使用...
  • acpchenpeng
  • acpchenpeng
  • 2016年01月25日 10:48
  • 256

kubernetes学习记录(4)——创建kubernetes覆盖网络

Kubernetes的网络模型要求每一个Pod都拥有一个扁平化共享网络命名空间的IP,成为PodIP,Pod能够直接通过PodIP跨网络与其他物理机和Pod进行通信。要实现Kubernetes的网络模...
  • huqigang
  • huqigang
  • 2017年08月02日 11:04
  • 335

STL基础篇(适合初学者快速入门)

1.       STL 是什么 作为一个C++ 程序设计者,STL 是一种不可忽视的技术。 Standard Template Library (STL) :标准模板库, 更准确的说是 C++ 程...
  • a20102110080212
  • a20102110080212
  • 2013年09月14日 11:52
  • 2293

CAS学习笔记(四)

CAS源码还是比较复杂的,通过几天的学习,整理了CAS的工作流程。一、第一次访问1、浏览器访问:https://localhost:8443/App12、客户端:AuthenticationFilte...
  • u011372122
  • u011372122
  • 2015年07月19日 19:38
  • 565

STL源码学习总结及项目下载地址

从开始看STL源码到今天差不多有一个月的时间了,在这研读STL源码过程中确实学习到了很多,深深被大师们的设计思想所打动。其中使用迭代器的思想是其STL的最大的亮点,通过泛型编程,是得所有的容器对外都提...
  • a_1_2_ab
  • a_1_2_ab
  • 2014年04月29日 09:45
  • 1105

maven零散知识点记录

以下是学习maven过程中需要记录的知识点,后期慢慢追加。 1、maven的中央工厂位置是哪个网址,可以在哪里查看 在我们的maven安装目录下,有个jar包叫maven-model-builde...
  • alabadazi
  • alabadazi
  • 2015年11月21日 22:42
  • 293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习STL过程中的一些零散记录4
举报原因:
原因补充:

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