trait技术

Trait技术

Trait技术的基本概念

思考这样的一个问题,在STL中,一个iterator如果想要获取它所指对象的型别应该怎么办?其实有个很简单的方法,那就是使用C++中的typedef。代码如下:

Template <class T>
Struct MyIter {
typedef  T value_type;
// ......
}

但是, 如果iterator本身就是个原生的指针,那么如何解决呢? 这就需要用的我们的trait技术了。可以分两步走来解决这个问题。

Step1: “trait” (萃取)类的value_typetrait类中

template <class I>
struct iterator_traits {
typedef typename I::value_type value_type;
// ......
}

重新建立一个类有什么作用呢? 其实,主要就是利用c++ template的一个特性:偏特化。

Step2:偏特化支持原生指针

template <class I>
struct iterator_traits<I*> {
typedef typename I value_type;
// ......
}

完成以上两步,就可以支持原生指针了。trait技术被大量运用在STL中, 它利用内嵌型别的编程技巧和template的推导功能,增强了c++未能提供关于型别认证方面的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值