正文
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)行編譯。)