今天來寫點有點難度的東東:泛型程式設計與模板元程式設計。
寫這種生僻的東東我是比較排斥的,但誰讓我看到boost庫中專門對這兩個東東分了個大類別呢。開始吧~
不知道大家有沒有過這種體驗,學數學時整本書上的概念都背熟了,一碰到題目還是手足無措,不知從何下手。泛型和模板元程式設計這兩個概念理解起來還是比較簡單的:
泛型程式設計,即把引數的資料型別作為乙個引數傳遞到函式,本質上就是引數化型別。簡單舉個例子,如果乙個函式需要接收int或float型別的變數,需要使用過載函式編寫2個類似的函式**;這時候如果使用泛型程式設計,只需要把接收變數的型別泛型化,寫乙個函式即可實現接收各種資料型別的函式了。
模板元程式設計,即使用模板實現元程式設計,是元程式設計最基本的運用。而所謂元程式設計,就是編寫乙個用來編寫程式的程式**。舉個例子,使用遞迴函式的時候,就可以採用模板元程式設計的方式去替代實現,按元程式設計的思想和格式寫一段**,計算機就會在編譯期自動生成遞迴呼叫時需要的所有函式的**,從而實現計算得到結果。
提公升效能。開發歷史上抽象能力的上公升往往意味著效能的下降,但是泛型並不是!因為使用泛型,可以避免裝箱和拆箱操作。
型別安全。arraylist等類中都有強制轉換的機制,如果使用泛型程式設計,則編譯器可以直接檢查出錯誤。
**重用。泛型定義一次,就可以用許多不同的型別例項化。
泛型的缺點:
可執行檔案會變大。在儲存空間有限時,必須要重視。《effecitve c++》中專門提到:不要在模板中使用不必要的引數,因為每乙個不同的引數編輯器都會為之生成一套相應的**。泛型產生冗餘**是無法避免的。
模板元程式設計的優點:
執行效率提公升。因為模板的運算以及展開都是在編譯期,會花相對較長的編譯時間,但能夠獲得更有效率的執行碼。
**量變小。模板元程式設計允許程式設計師專注在架構上並委託編譯器產生任何客戶要求的實現。因此,模板元程式設計可達成真正的泛用**,促使**縮小並較號維護。
模板元程式設計的缺點:
可讀性差。較難令人理解,對於模板元程式設計經驗不豐富的程式設計師來說,程式變的難以維護。
移植性。由於各編輯器的差異,大量依賴模板元程式設計的**可能會有移植性問題。
泛型程式設計 元程式設計的概念
泛型程式設計 generic programming 最初提出時的動機很簡單直接 發明一種語言機制,能夠幫助實現乙個通用的標準容器庫 關於泛型的理解可以總結下面的一句話,它是把資料型別作為一種引數傳遞進來。元程式設計 metaprogramming 是指某類電腦程式的編寫,這類電腦程式編寫或者操縱其...
模板與泛型程式設計
模板是泛型變成的基礎。泛型程式設計 編譯與型別無關的 是一種復用的方式,模板分為模板函式和模板類。模板函式是乙個通用的函式模板,而不是為每一種型別定義乙個新函式,乙個函式模板就像乙個公式,針對不同型別函式生成不同的函式版本。關鍵字 template 以 template 開始,後面跟乙個模板引數列表...
模板與泛型程式設計
泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。函式模板代表了乙個函式家族,該函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本。模板的格式 template 返回值型別 函式名 引數列表 模板分為類模板和函式模板 模板它本身並不是函式,是編譯...