traits,又被叫做特性萃取技術(shù),說(shuō)得簡(jiǎn)單點(diǎn)就是提取“被傳進(jìn)的對(duì)象”對(duì)應(yīng)的返回類型,讓同一個(gè)接口實(shí)現(xiàn)對(duì)應(yīng)的功能。因?yàn)镾TL的算法和容器是分離的,兩者通過(guò)迭代器鏈接。算法的實(shí)現(xiàn)并不知道自己被傳進(jìn)來(lái)什么。萃取器相當(dāng)于在接口和實(shí)現(xiàn)之間加一層封裝,來(lái)隱藏一些細(xì)節(jié)并協(xié)助調(diào)用合適的方法,這需要一些技巧(例如,偏特化)。最后附帶一個(gè)小小的例子,應(yīng)該能更好地理解 特性萃取。
下面大部分來(lái)源于《STL源碼剖析》,看原書能了解更多細(xì)節(jié)。
Traits編程技法
讓我們一點(diǎn)點(diǎn)拋出問(wèn)題,然后一點(diǎn)點(diǎn)深入。
1. 首先,在算法中運(yùn)用迭代器時(shí),很可能會(huì)用到其相應(yīng)型別(迭代器所指之物的型別)。假設(shè)算法中有必要聲明一個(gè)變量,以“迭代器所指對(duì)象的型別”為型別,該怎么辦呢?
解決方法是:利用function template的參數(shù)推導(dǎo)機(jī)制。
1 template <class I, class T> 2 void f