2008-09-21 18 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是一本艰难的书。