2008-09-21 92 views
104

靜態元編程(又名「模板元編程」)是一種很棒的C++技術,它允許在編譯時執行程序。一個燈泡,當我讀到這個規範的元編程例子在我的頭上,一旦去了:C++模板元編程的最佳介紹?

#include <iostream> 
using namespace std; 

template< int n > 
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; }; 

template<> 
struct factorial<0> { enum { ret = 1 }; }; 

int main() { 
    cout << "7! = " << factorial<7>::ret << endl; // 5040 
    return 0; 
} 

如果想了解更多關於C++靜態元編程,什麼是最好的來源(書籍,網站,在線課件, 隨你)?

+40

燈泡熄滅或熄滅? – horseyguy 2010-05-04 18:58:55

+32

關閉。絕對關閉。 – 2012-08-30 19:05:51

回答

99

[回答我的問題]

我發現迄今是第10章,「靜態元編程在C++」從產生式編程,方法,工具和應用程序由剋日什托夫·Czarnecki談到最好的介紹和Ulrich W.Eisenecker,ISBN-13:9780201309775;和第17章, 「元程序」 的C++模板:完全指南由David Vandevoorder和尼古拉M.約祖蒂斯,ISBN-13:9780201734843.

alt text http://ak.buy.com/db_assets/prod_images/941/30676941.jpgalt text http://ak.buy.com/db_assets/prod_images/235/31025235.jpgalt text http://ak.buy.com/db_assets/prod_images/704/30680704.jpgalt text http://ak.buy.com/db_assets/prod_images/218/39856218.jpg

託德Veldhuizen具有優異的教程here

在一般C++編程的一個很好的資源是現代C++設計由安德烈Alexandrescu的,ISBN-13:9780201704310.這本書混合有點元編程與其他模板技術。具體來說,請參見2.1節「編譯時斷言」,2.4「將類型常量映射到類型」,2.6「類型選擇」,2.7「編譯時檢測可轉換性和繼承性」,2.9「NullTypeEmptyType」和2.10「類型特徵「。

我已經找到了最好的中級/高級資源是C++模板元編程由戴維·亞伯拉罕和阿列克謝Gurtovoy,ISBN-13:9780321227256

如果你喜歡的一本書,讓C++模板:完整指南,因爲它也是一般模板的明確參考。

3

谷歌Alexandrescu的現代C++設計:泛型編程和設計模式應用

4

Modern C++是我讀過的最好介紹之一。它涵蓋了模板元編程的實際有用示例。也請看一下伴侶庫Loki

22

安德烈Alexandrescu的的Modern C++ Design本書涵蓋了很多這方面和其他技巧快捷,高效的現代C++代碼,是爲Loki庫的基礎。

另外值得一提的是Boost庫,大量使用這些技術和通常的質量非常高,從學習(儘管有些是相當密集的)。

4

Veldhuizen的原始文件很好。如果你需要整本書,那麼Vandevoorde的書「C++模板完整指南」就是這樣。當你準備好上師的課程時,試試Alexandrescu的Modern C++ Design。

11

Modern C++ Design,由Alexandrescu出色的書籍和設計模式框架。警告的話,在閱讀本書後,我停止了C++的研究,並且認爲「到底是什麼,我可以選擇一種更好的語言並免費獲得它」。

涌現在腦海
+4

「什麼,我可以選擇一個更好的語言,並獲得它免費」 嗯,你是什麼意思? 「免費」我特別困惑。你有什麼其他的語言? – 2008-09-21 22:16:07

6

兩個很好的書是:

  • 現代C++設計/安德烈·Alexandrescu的(它實際上儘管名7歲!)
  • C++模板:完全指南/ Vandevoorde &約祖蒂斯

這是一個相當深入的領域,所以像這樣的好書之一絕對是在網站上推薦的。一些更先進的技術將讓你研究一段時間的代碼來弄清楚它們是如何工作的!

5

不會有大量的書籍,因爲有很多經驗的人員名單有限。在2000年的第一次C++模板編程研討會上,模板元編程就開始了,許多迄今爲止命名的作者都出席了。 (IIRC,安德烈沒有。)這些先驅者對這個領域有很大的影響,現在寫的基本上應該寫成什麼。我個人建議Vandevoorde & Josuttis。如果你是該領域的新手,Alexandrescu's是一本艱難的書。