在模板編程中,有幾個(gè)常用的技術(shù):模板(偏)特化,特性萃取,標(biāo)簽分派,匹配失敗不是錯(cuò)誤。其中模板(偏)特化是基礎(chǔ),匹配失敗不是錯(cuò)誤(SFINAE)應(yīng)用最為廣泛。
現(xiàn)代C++對(duì)模板編程做了更多的加強(qiáng),boost.hana又結(jié)合constexpr和lambda把類型與值的計(jì)算統(tǒng)一了起來。放眼C++世界,尤其是C++庫,幾乎都是使用模板的泛型編程。
話說在C++的世界中(并且?guī)缀跛姓Z言中)函數(shù)的作用是最為明顯的,試想:沒有類也可以完成編程任務(wù),但沒有函數(shù)卻不好說。另一方向只使用變量和語句也能完成少量的工作,但不進(jìn)行函數(shù)的封裝終難成大事。這幾年函數(shù)式編程赿來赿流行,與函數(shù)的重要性不無關(guān)系。所以無論是用類也罷,用函數(shù)也罷,或者使用C++新增的變量模板,我們的思路是始終圍繞著把它們向函數(shù)上靠就好。從MPL的元函數(shù)開始就試圖使類盡可能像函數(shù),我們?cè)谀0寰幊讨幸惨鼓0孱?、模板變量、乃至模板函?shù)都向“函數(shù)”靠攏。這里函數(shù)加上引號(hào)我想表達(dá)的是包括但不限于constexpr函數(shù)。
一、先從類型計(jì)算將用類實(shí)現(xiàn)來轉(zhuǎn)為用函數(shù)實(shí)現(xiàn)起。將類型計(jì)算與值計(jì)算統(tǒng)一起來,以例子說話:
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式