静态元编程(又名“模板元编程”)是一种很棒的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 ++静态元编程的知识,最好的资源是什么(书籍,网站,在线课件,等等)?
答案 0 :(得分:106)
[回答我自己的问题]
迄今为止我发现的最佳介绍是Krzysztof Czarnecki和Ulrich W. Eisenecker撰写的第10章“C ++中的静态元编程”,来自生成编程,方法,工具和应用,ISBN- 13:9780201309775;和第17章, C ++模板的“Metaprograms”:完整指南作者:David Vandevoorder和Nicolai M. Josuttis,ISBN-13:9780201734843。
Todd Veldhuizen有一本很好的教程here。
一般来说,C ++编程的一个很好的资源是由Andrei Alexandrescu撰写的 Modern C ++ Design ,ISBN-13:9780201704310。这本书将一些元编程与其他模板技术相结合。特别是元编程,请参见2.1“编译时断言”,2.4“将积分常数映射到类型”,2.6“类型选择”,2.7“在编译时检测可转换性和继承”,2.9“NullType
和{ {1}}“和2.10”类型特征“。
我发现的最好的中间/高级资源是David Abrahams和Aleksey Gurtovoy的 C ++模板元编程,ISBN-13:9780321227256
如果您只想要一本书,请获取 C ++模板:完整指南,因为它通常也是模板的权威参考。
答案 1 :(得分:23)
Andrei Alexandrescu的Modern C++ Design书涵盖了快速高效的现代C ++代码的大量此类技巧和其他技巧,是Loki库的基础。
另外值得一提的是Boost库,它们大量使用这些技术并且通常具有非常高的质量来学习(尽管有些是非常密集的)。
答案 2 :(得分:12)
Modern C++ Design,由Alexandrescu撰写的精彩图书和设计模式框架。警告的话,在读完这本书之后,我停止了做C ++,并且想到“什么,我可以选择一种更好的语言并免费获得它。”
答案 3 :(得分:6)
我想到的两本好书是:
这是一个相当深入的领域,所以一本好的书就像网站一样。一些更高级的技术将让你研究代码一段时间来弄清楚它们是如何工作的!
答案 4 :(得分:5)
Modern C++是我读过的最好的介绍之一。它涵盖了模板元编程的实际有用示例。另请查看配套库Loki。
答案 5 :(得分:5)
由于经验丰富的人员名单有限,因此不会有大量的书籍。模板元编程在2000年的第一个C ++模板编程研讨会上开始实现,到目前为止,很多作者都参加了。 (IIRC,Andrei没有。)这些先驱们对这个领域产生了很大的影响,现在基本上应该写的是什么。就个人而言,我建议Vandevoorde&amp;约祖蒂斯。如果你是这个领域的新手,Alexandrescu是一本很难的书。
答案 6 :(得分:4)
谷歌Alexandrescu,现代C ++设计:应用通用编程和设计模式
答案 7 :(得分:4)
Veldhuizen的原始论文很好。如果你想要一本完整的书,那么就有Vandevoorde的书“C ++模板完整指南”。当你为硕士课程做好准备时,试试Alexandrescu的Modern C ++ Design。