正文

回到頂部

1. TMP是什么?

模板元編程(template metaprogramming TMP)是實(shí)現(xiàn)基于模板的C++程序的過(guò)程,它能夠在編譯期執(zhí)行。你可以想一想:一個(gè)模板元程序是用C++實(shí)現(xiàn)的并且可以在C++編譯器內(nèi)部運(yùn)行的一個(gè)程序,它的輸出——從模板中實(shí)例化出來(lái)的C++源碼片段——會(huì)像往常一樣被編譯。

回到頂部

2. 使用TMP的優(yōu)勢(shì)

如果這沒(méi)有沖擊到你,是因?yàn)槟銢](méi)有足夠盡力去想。

 

C++不是為了模板元編程而設(shè)計(jì)的,但是自從TMP早在1990年被發(fā)現(xiàn)之后,它就被證明是非常有用的,為了使TMP的使用更加容易,在C++語(yǔ)言和標(biāo)準(zhǔn)庫(kù)中加入了一些擴(kuò)展。是的,TMP是被發(fā)現(xiàn)的,而不是被發(fā)明。當(dāng)模板被添加到C++中的時(shí)候TMP這個(gè)特性就被引入了。對(duì)于某些人來(lái)說(shuō)所有需要做的就是關(guān)注如何以一種聰明的和意想不到的方式來(lái)使用它。

TMP有兩種強(qiáng)大的力量。第一,它使得一些事情變得容易也即是說(shuō)如果沒(méi)有TMP,這些事情做起來(lái)很難或者不可能實(shí)現(xiàn)。第二,因?yàn)槟0逶幊淘?/strong>C++編譯期執(zhí)行,它們可以將一些工作從運(yùn)行時(shí)移動(dòng)到編譯期。一個(gè)結(jié)果就是一些原來(lái)通常在運(yùn)行時(shí)能夠被發(fā)現(xiàn)的錯(cuò)誤,現(xiàn)在在編譯期就能夠被發(fā)現(xiàn)了。另外一個(gè)結(jié)果就是使用TMP的C++程序在基本上每個(gè)方面都更加高效:更小的執(zhí)行體,更短的運(yùn)行時(shí)間,更少的內(nèi)存需求。(然而,將工作從運(yùn)行時(shí)移到編譯期的一個(gè)后果就是編譯時(shí)間增加了。使用TMP的程序比沒(méi)有使用TMP的程序可能消耗更長(zhǎng)的時(shí)間來(lái)進(jìn)行編譯。)

回到頂部

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式