正文

回到頂部

1. TMP是什么?

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

回到頂部

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

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

 

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

TMP有兩種強(qiáng)大的力量。第一,它使得一些事情變得容易,也即是說如果沒有TMP,這些事情做起來很難或者不可能實(shí)現(xiàn)。第二,因?yàn)槟0逶幊淘?/strong>C++編譯期執(zhí)行,它們可以將一些工作從運(yùn)行時(shí)移動到編譯期。一個(gè)結(jié)果就是一些原來通常在運(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的程序比沒有使用TMP的程序可能消耗更長的時(shí)間來進(jìn)行編譯。)

回到頂部

網(wǎng)友評論