1. 类型萃取的作用

类型萃取使用模板技术来萃取类型(包含自定义类型和内置类型)的某些特性,用以判断该类型是否含有某些特性,从而在泛型算法中来对该类型进行特殊的处理用来提高效率或者其他。例如:在STL中的destory算法根据函数的参数类型的特性:是否有trivial destructor来选择对应的策略来进行destory,如果为内置类型,则不调用该类型的destructor,否则对迭代器范围内的对象调用destructor来进行destory。

2. 函数派送

在STL中使用类型萃取能提供一种根据类型的某些属性在编译时期进行函数派送的机制。

例如:泛型函数destroy

template <typename ForwardIterator>
inline void destory(ForwardIterator first, ForwardIterator last)
{
__destory(first, last, value_type(first));
} template <typename ForwardIterator, typename T>
inline void __destory(ForwardIterator first, ForwardIterator last, T* )
{
typedef typename type_traits<T>::has_trivial_destructor trivial_destructor;
__destory_aux(first, last, trivial_destructor());
} template <typename ForwardIterator>
inline void __destory_aux(ForwardIterator first, ForeardIterator last, __false_type); template <typename ForwardIterator>
inline void __destory_aux(ForwardIterator first, ForeardIterator last, __true_type);

在最上层的destory函数通过value_type全局函数来对迭代器萃取迭代器所指向的对象的类型,然后调用__destory,该函数通过类型萃取来判断该类型是否含有trivial destructor来在编译时期进行函数派送。函数派送机制通过模板的编译机制和模板函数的重载来避免在函数代码使用if和else语句或者switch来判断是否有trivial destructor从而进行函数派送,避免了效率损失和代码的混乱。

3.SGI-STL中type traits可以萃取的类型属性

在SGI-STL中,可以萃取的类型属性如下:

: has_trivial_default_constructor
: has_trivial_copy_constructor
: has_trivial_assignment_operator
: has_trivial_destructor
: is_POD_type

最新文章

  1. 20款jQuery 的音频和视频插件
  2. iOS之清除缓存
  3. UIView
  4. Java的生日
  5. R语言常用命令
  6. .net 4.0 ValidateRequest=&quot;false&quot;
  7. Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
  8. java命令行运行main时jar及其配置
  9. JavaScript中JSON字符串和JSON对象相互转化
  10. mariadb 压缩包gz安装方式
  11. Web Service进阶(三)HTTP-GET, HTTP-POST and SOAP的比较
  12. 软件工程(GZSD2015) 第三次作业提交进度
  13. Prometheus监控学习笔记之Prometheus不完全避坑指南
  14. 安装plsql developer
  15. git diff 分支1 分支2 --stat命令没有将所有的不同显示出来
  16. 删除php数组中的元素
  17. learning docker steps(5) ----- docker stack 初次体验
  18. Q:判断链表中是否存在环的相关问题
  19. js判断当前浏览器是pc端还是移动端
  20. jmeter -xml日志格式中网络时间与服务器时间的区分

热门文章

  1. windows.h与winsock2.h的包含顺序
  2. Android 监听器
  3. php中date函数获取当前时间的时区误差解决办法
  4. node anyproxy ssi简易支持
  5. Thinkphp的时间判断
  6. [LeetCode]题解(python):146-LRU Cache
  7. [问题解决] &quot;Nautilus could not create the required folder &quot;/home/kenneth/.config/nautilus&quot;
  8. poj2190
  9. [LeetCode][Python]17: Letter Combinations of a Phone Number
  10. SQL高级查询