trait技术

来源:互联网 发布:小蜜蜂数控切割机编程 编辑:程序博客网 时间:2024/06/05 21:18

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++未能提供关于型别认证方面的能力。

原创粉丝点击