在模板編程中,有幾個常用的技術:模板(偏)特化,特性萃取,標簽分派,匹配失敗不是錯誤。其中模板(偏)特化是基礎,匹配失敗不是錯誤(SFINAE)應用最為廣泛。

 

現代C++對模板編程做了更多的加強,boost.hana又結合constexpr和lambda把類型與值的計算統(tǒng)一了起來。放眼C++世界,尤其是C++庫,幾乎都是使用模板的泛型編程。

 

話說在C++的世界中(并且?guī)缀跛姓Z言中)函數的作用是最為明顯的,試想:沒有類也可以完成編程任務,但沒有函數卻不好說。另一方向只使用變量和語句也能完成少量的工作,但不進行函數的封裝終難成大事。這幾年函數式編程赿來赿流行,與函數的重要性不無關系。所以無論是用類也罷,用函數也罷,或者使用C++新增的變量模板,我們的思路是始終圍繞著把它們向函數上靠就好。從MPL的元函數開始就試圖使類盡可能像函數,我們在模板編程中也要使模板類、模板變量、乃至模板函數都向“函數”靠攏。這里函數加上引號我想表達的是包括但不限于constexpr函數。

 

一、先從類型計算將用類實現來轉為用函數實現起。將類型計算與值計算統(tǒng)一起來,以例子說話:

 

電
        
		<div   id=

網友評論