理解模版

Andy Niu發表於2013-11-11

1、解決的問題:考慮下面的需求,現在有一個方法Fun,形參是實體A,在方法內呼叫A的啟動方法,A.Start(),實體A可能是電腦,也可能使汽車,也可能使空調,對於每一類實體都要寫一個內容相同的方法,這些方法構成過載。有沒有更好的辦法呢?

  模版就是問了解決這個問題,通過使用一個佔位符,再呼叫方法的時候,讓編譯器自動生成一個方法。

2、模版是自動化的過載,是延遲的過載。如何理解?

  首先,在呼叫方法的時候,編譯器根據型別實參,自動生成一個過載方法。其次,一般的過載方法是在呼叫之前,就要寫好,而模版是在呼叫的時候,才自動生成對應的方法。

3、模版是編譯時多型。對於上面提到的問題,還有一個解決辦法,那就是使用繼承。讓這些實體繼承介面IStart,實現Start方法,根據面向介面程式設計,使用IStart作為Fun的形參。

  使用繼承與使用模版的區別是:繼承是執行時多型,執行時根據物件的實際型別,呼叫對應的方法。執行時多型是通過虛方法指標實現的,虛方法指標,指向虛方法表,虛方法表中對應著每個虛方法。而模版是編譯時多型,自動生成過載方法,會導致原始碼的體積變大。

4、模版是超程式設計,提升了一個檔次,超程式設計可認為是生成程式碼的程式碼。

相關文章