C 模板元程式設計

2021-08-30 20:27:51 字數 1070 閱讀 1197

昨天wl發給我一段我覺得很「奇怪」的c++**。。當時沒看太懂,後來問了才知道是叫做模板元程式設計。

template struct binary ; template <> // specialization struct binary<0> // terminates recursion ;

覺得很新奇,於是乎索要了一本電子書,名為《addison.wesley. c++.template.metaprogramming》。

把第一章稍微看了一下,有點點暈菜,不過大概了解了模板元程式設計。

這本書不決定繼續看下去,因為我覺得這種太技術底層的東西,需要用的時候再學吧。否則的話,知道這個技術,知道它能幹嘛——就ok了。用某些專家的話說「研究c++就是浪費生命。」——雖然很偏激,但是有時候參考一下還是有道理的。

現在總結如下:

元程式設計(metaprogram),按字面上意思說就是「程式的程式」,它是一段程式,用來處理其他程式。比如咱們的編譯器,可以處理咱們的**成中間語言或者機器語言。yacc就是乙個典型的代表。

元程式設計在c++中的具體體現是可以使用模板來實現。一般由演算法構成模板和特化模板組成。演算法構成模板用來描述具體解決方法,特化用來終結模板演算法。

比如上面那段程式,前一段binary可以啟動具體演算法,而後面的binary<0>就是它的乙個終結特化。

整個程式可以用來計算二進位制轉十進位制,如 int k = binary<1001>::value 則可以得到二進位制數1001轉化為10進製的結果。

元程式設計有什麼好處?

—— 它能打破編譯器對你程式特性的限制,可以將一些計算移到編譯時期(compile-time),節省在執行時(runtime)的計算時間。

所以我覺得它非常適合於封裝底層**,這樣能極大效率的提高上層復用時的效率。將計算在編譯期搞定。

另外c++的「準標準庫」boost中提供了乙個模板元程式設計的框架,叫mpl(boost metaprogramming library),據說非常優美,我是沒空去看了……

總之我覺得最大的亮點就是c++的模板元程式設計提供了可以在編譯級別解決問題的方法,但其也有侷限性,比如計算的肯定是內部生成的資料,而不能引用外部變數。——所以很適合底層封裝度高的程式,上層會很受益。

C 模板元程式設計

原理 模板元程式由編譯器在編譯期解釋執行,利用模板特化機制實現編譯期條件選擇結構,利用遞迴模板實現編譯期迴圈結構。模板元程式設計 metaprogramming 意思是,程式設計系統將會執行我們所寫的 來生成新的 而這些新 才真正實現了我們所期望的功能。元程式設計最大的特點在於 某些使用者自定義的計...

C 之模板元程式設計

關於模板原程式設計知識強烈推薦 非常好!首先複述一下模板元程式設計,以下標紅或者加粗的地方是模板元程式設計的精髓 從程式設計范型 programming paradigm 上來說,c 模板是 函式式程式設計 functional programming 它的主要特點是 函式呼叫不產生任何 沒有可變的...

模板 模板元程式設計

將進行型別引數代替作為一種方便的方法,這意味著產生了一種支援編譯時程式設計的機制,這樣的程式稱為模板元程式 template metaprogram 因為正在 為乙個程式進行程式設計 事實證明可以用它做很多事情。實際上,模板元程式設計就是完全的圖靈機 turing complete 因為它支援選擇 ...