為什麼要設計出模板,他解決什麼問題?
1、首先考慮類别範本:
考慮下面的需求:工廠生產玩具,根據模具生產出玩具。現實當中的模具生產出來的玩具都是一樣的,假設我們的模具比較高階,能夠設定玩具的屬性,生產出不一樣的玩具。比如玩具狗,可以生出不一樣的玩具狗,但是這些狗有一組相同的屬性,比如大小,顏色,形狀等,這些屬性可能不同。如果沒有設定玩具狗的屬性,會有一個預設值。這裡的狗模具就是類,生產出的玩具狗,就是物件,或者說例項。
接著思考,工廠擴大,需要生產玩具貓,玩具猴,怎麼辦?首先要做的就是,先造出貓模具,猴模具,有沒有更好的辦法呢?
比如說,先搞出一個生產模具的模具,這樣的話,只要告訴我,生產某種玩具動物,這個生產模具的模具生產出對應的動物模具,有這個模具就可以生產出玩具動物。這個生產動物模具的模具就是類别範本。
2、考慮方法模板:
先考慮方法的呼叫,假如在很多地方,都要加工小麥,愚蠢的辦法是每個地方都準備一個機器加工小麥。更好的辦法是,只要有一個加工小麥的機器就好了,需要加工小麥的地方,只要知道這個機器的地址,使用這個機器,獲取加工結果就好了。
接著思考,我現在要加工大米,黃豆,怎麼辦?這就需要不同的機器,能不能自動生產出相應的機器,這就需要一個製造機器的機器。在模具的例子中,要讓生產模具的模具,生產出一個模具,必須告訴它,我要哪一種動物的模具。但是在這個例子中,不需要告訴生產機器的機器,我要哪一種機器,只要說,我要加工那種原料,他就能推斷出,需要製造出哪種機器。你要加工大米,生產機器的機器一看,沒有加工大米的機器,那就製造出這樣的機器。
3、上面說的自動化過程,實際上是由編譯器完成的。編譯器本身也是一個軟體。你要想讓軟體做一件事情,必須沒有歧義或者二義性,編譯器必須能夠準確理解你的意圖。如果存在歧義或者二義性,編譯器就不知道怎麼做了,或者是編譯器按照他自己預設的理解去做這件事,這種理解可能和你的意圖不一致。因此,學習C++,有一部分是學習編譯器。