学习STL过程中的一些零散记录4
来源:互联网 发布:135端口入侵 编辑:程序博客网 时间:2024/05/29 15:08
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;
}
- 学习STL过程中的一些零散记录4
- 学习STL过程中的一些零散记录1
- 学习STL过程中的一些零散记录2
- 学习STL过程中的一些零散记录3
- 一些零散的记录
- STL学习之零散记录(不断更新中)
- linux 学习零散记录
- 记录一些零散的知识。
- C++学习过程中的补遗的零散知识点(1)
- Java零散知识点学习记录
- Android 学习记录-零散知识点
- STL学习过程中的笔记
- 一些比较零散的问题记录
- 一些零散的记录(随时更新)
- matlab的使用(五)上机过程中的一些零散知识
- Android学习中的一些记录
- OpenStack安装过程中的一些问题记录
- QTcpSocket使用过程中的一些问题记录
- 初次使用cocoapods注意事项
- LeetCode Bitwise AND of Numbers Range
- CDOJ 763 树上的鸟儿(水题/模拟题)
- LeetCode Happy Number
- Codeforces Round #289 (Div. 2, ACM ICPC Rules) D. Restoring Numbers 构造 数学
- 学习STL过程中的一些零散记录4
- EularProject 34: 一个数字与他每位数的阶乘和
- 十六进制色码表
- roboguice2教程
- Sqlite中如何返回唯一数据
- centos下nginx+tomcat安装配置 nginx结合tomcat
- LeetCode Remove Linked List Elements
- Spring AOP + Redis缓存数据库查询
- 使用Objective-C的文档生成工具:appledoc