C 模板程式設計中的Traits技術

2021-08-25 07:02:14 字數 902 閱讀 7789

由於c++不支援type_of,所以traits技術,實際上就是通過通過模板中的型別推導機制,獲取到變數的型別,以其在編譯器確定函式的呼叫。stl中的迭代器就廣泛的運用到該技術。下面是乙個簡單的例子:

凡是乙個迭代器,我們總是希望能夠知道它所指的資料的資料型別,我們可以這樣做:

template class iterator ;

當然,這需要我們用到迭代器的類,定義乙個value_type,否則會編譯不過。

然後,無論我們在什麼地方用到迭代器,我們總是可以知道它所指的資料型別:

iterator::value_type value;

但是這樣的寫法有乙個缺陷,就是:指標也是一種迭代器,但是卻不是類,因此我們便無法得知指標指向的是什麼元素。為此引入traits技術,在原來的迭代器類上面再加一層:

template class iterator_traits ;

這樣,我們就可以得知乙個迭代器所指的型別:

iterator_traits::value_type value;

而對於指標,可以使用模板中的偏特化技術:

template class iterator_traits; template class iterator_traits;

因此,模板程式設計中的traits技術,其實就是「萃取」出變數型別。

還可以寫乙個輔助函式:

template iterator_traitsvalue_type(iter iter)

這樣,我們在寫程式的時候,可以把程式寫成兩層:

// 第一層 template void function(iter i) // 第二層: 根據不同的資料型別,做不同的處理 template void _function(iter i, int) template void _function(iter i, char)

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

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

C 中Traits技術 2 與迭代器

接著了解c 中的traits技術。traits技術可以獲取乙個型別的相關資訊。比如針對乙個泛型迭代器,型別引數t表示迭代器所指向的型別。template typename t class cmyiterator 我們使用這個迭代器時,如何才能知道這個迭代器所指向元素的型別呢?比如我們可以為這個類加入...

STL中的Traits程式設計技巧

stl原始碼剖析 一書中提到traits程式設計技法,它的作用是獲取型別 associated type 的特性。這樣講比較抽象,到底什麼是相應型別,或者到底什麼時候需要用到traits程式設計技法呢?先來看乙個例子。假設有這麼乙個函式,接受乙個iterator,返回這個iterator所指代的型別...