STL之traits程式設計技法

2022-01-22 19:20:02 字數 1034 閱讀 8651

traits程式設計技法利用了「內嵌型別」的程式設計技巧與編譯器的template引數推導功能。

下面主要看看利用traits程式設計技法實現的迭代器萃取機制。

5種迭代器型別定義:

struct

input_iterator_tag {};

struct

output_iterator_tag {};

struct forward_iterator_tag : public

input_iterator_tag {};

struct bidirectional_iterarot_tag : public

forward_iterator_tag {};

struct random_access_iterator_tag : public bidirectional_iterarot_tag {};

std::iterator的定義

template class pointer = t*, class reference = t&>

struct

iterator ;

如果想和stl協同工作,自行定義的迭代器必須定義iterator_category、value_type、difference_type、pointer、reference這五大內嵌型別。為了方便,stl定義了std::iterator這個基類,自定義的迭代器只要繼承這個基類

就可以了。但要注意的是,並不是stl中的所有迭代器都繼承了這個基類,比如_deque_iterator。

"榨汁機"traits

template 

struct

iterator_traits ;

由於原生指標也是一種迭代器,但是原生指標沒有內嵌型別,因此,iterator_traits需要為原生指標提供特化版本。

template 

struct iterator_traits;

template

struct iterator_traits;

STL中,traits程式設計技法 模板

stl中,traits程式設計技法得到了很大的應用,了解這個,才能一窺stl奧妙所在。先將自己所理解的記錄如下 traits技術可以用來獲得乙個 型別 的相關資訊的。首先假如有以下乙個泛型的迭代器類,其中型別引數 t 為迭代器所指向的型別 template class myiterator 當我們使...

STL之迭代器與traits程式設計技法

iterator模式定義如下 提供一種方法,使之能夠依序巡防某個聚合物所含的各個元素,而又不暴露該聚合物的內部表示式。迭代器是一種smart pointer 舉例auto ptr template class auto ptr auto ptr template auto ptr auto ptr ...

traits程式設計技法

iterator模式定義如下 提供一種方法,是指能夠依次序尋訪某個聚合物 容器 所含的各個元素,而又無需暴露該聚合物的內部表達。迭代器是一種智慧型指標 迭代器最重要的程式設計工作就是對opertor 和operator 進行過載工作。在演算法中運用迭代器時,很可能會用到其相應型別。利用functio...