我对C++ Traits编程技法的一点点理解
来源:互联网 发布:索尼c6802怎么清除数据 编辑:程序博客网 时间:2024/05/19 20:38
第一次听说traits是在一次电话面试中,当时还没有听说过这个词。之后查过资料,但也不是十分明白,直到今天重新看了一下《STL源码剖析》,稍微有一些想法。
1. traits是模板编程里面的一个编程技法。可能因为不是面向对象的,所以算不上一种设计模式。虽然traits本身一般实现为模板(itrator_traites<T>,以及__type_traits<T>等),但和智能指针(auto_ptr<T>)这种比较大众的模板相比,traits的用法又有点宽泛,所以感觉说traits是一种编程技法是比较保险的。
2. traits是STL里面非常重要的概念,所以我觉得用STL来体会traits是有帮助的。而提起STL,其主要内容就是容器和算法,连接两者的的纽带就是迭代器。由于迭代器遇到了一些问题,于是需要traits这种技法的帮助。当然也可能是先有traits这种技法,然后才决定用迭代器以及容器和算法分离的方式来实现STL。
3. traits是“萃取”还是“特性”的意思?侯捷说是“特性萃取机”和“榨汁机”。我的理解是,通过偏特化的机制,把特性信息过滤出来——榨汁。比如下面的特化版本,分别把T*和const T*过滤出来T。从而解决了原生指针提取类型特征的问题。
template<class T>struct iterator_traits<T*> { typedef T value_type;};
template<class T>struct iterator_traits<const T*> { typedef T value_type;};4. 在iterator中,traits除了解决value type的问题,还可以提取其他的4种类型信息:iterator category、difference type、pointer、reference。在__type_traits<T>中,traits用来提取类的拷贝控制和析构的类型,其用法也有点傻,内建类型都hard code了一遍,例如__type_traits<char>。
5. 上网看了看其他人的讲解,各自有各自的例子,但都没有STL iterator的好理解,所以还是看不懂,然后也不知道我自己的理解是否正确。所以先写出来,等以后回头再看的时候,有个对比吧。
0 0
- 我对C++ Traits编程技法的一点点理解
- C++—Traits编程技法
- C++——Traits编程技法
- Traits编程技法一
- traits编程技法感悟
- Traits编程技法
- traits编程技法
- traits编程技法感悟
- 我对搜索算法的一点点理解
- 迭代器与traits编程技法
- STL之traits编程技法
- STL之traits编程技法
- Traits编程技法之type_trait
- Traits编程技法之iterator_traits
- STL中的traits编程技法
- STL中traits编程技法
- 对type traits的理解
- C++traits技术的理解
- string & cstring
- ASP.NET弹出对话框几种基本方法
- Tomcat 全攻略
- 微软2014实习生及秋令营技术类职位在线测试——K-th string
- 【Sublime Text 3】——Decode error - output not utf-8
- 我对C++ Traits编程技法的一点点理解
- 【JAVA学习】Linux(ubuntu)下成功配置jdk1.7.0_51
- ckeditor配置说明+注意事项
- 成为一个合格程序员的十三条原则
- 微软2014实习生及秋令营技术类职位在线测试——Reduce inversion count
- 顺序栈和链表栈。
- PHP缓存应用场景分析
- FilenameFilter的使用
- Redis VS Memcached压力测试报告