我对C++ Traits编程技法的一点点理解

本文介绍了作者对C++ Traits编程技法的理解,包括其作为模板编程的一种技法,它在STL中的重要性,特别是如何在解决迭代器问题上发挥作用。通过特质类,可以萃取类型信息,例如从原生指针中提取类型。尽管网上有各种解释,但作者发现以STL迭代器为例更容易理解Traits,并希望通过记录自己的理解,以便后续验证。
摘要由CSDN通过智能技术生成

第一次听说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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值