最好的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 ++静态元编程的更多信息,最好的资源是什么(书籍,网站,在线课件,等等)?
解决方案
google Alexandrescu,现代C ++设计:通用编程和设计模式的应用
现代C ++是我读过的最好的介绍之一。它涵盖了模板元编程的实际有用示例。还可以看看伴侣图书馆Loki。
Andrei Alexandrescu的《 Modern C ++ Design》一书涵盖了许多有关快速有效的现代C ++代码的技巧,并且是Loki库的基础。
另外值得一提的是Boost库,该库大量使用这些技术,并且通常具有很高的学习质量(尽管有些库非常密集)。
Veldhuizen的原始论文很好。如果我们要阅读整本书,则可以参考Vandevoorde的书" C ++模板完整指南"。当我们准备好攻读硕士课程时,请尝试Alexandrescu的Modern C ++ Design。
Modern C ++ Design,Alexandrescu撰写的精彩著作和设计模式框架。值得一提的是,读完这本书后,我停止了使用C ++的工作,并想:"到底,我可以选择一种更好的语言并免费获得它"。
我想到的两本好书是:
- 现代C ++设计/ Andrei Alexandrescu(尽管有这个名字,但实际上已经7岁了!)
- C ++模板:完整指南/ Vandevoorde和Josuttis
这是一个非常深入的领域,因此绝对建议在网站上推荐其中一本好书。一些更高级的技术将使我们花一些时间研究代码以弄清楚它们是如何工作的!
[回答我自己的问题]
到目前为止,我发现的最好的介绍是Krzysztof Czarnecki和Ulrich W. Eisenecker撰写的Generative Programming,Methods,Tools and Applications中的第10章" C ++中的静态元编程",ISBN-13:9780201309775;以及第17章" C ++模板的"元程序":David Vandevoorder和Nicolai M. Josuttis的完整指南,ISBN-13:9780201734843.
替代文字http://ak.buy.com/db_assets/prod_images/941/30676941.jpg替代文字http://ak.buy.com/db_assets/prod_images/235/31025235.jpg替代文字http:// ak。 buy.com/db_assets/prod_images/704/30680704.jpg替代文字http://ak.buy.com/db_assets/prod_images/218/39856218.jpg
Todd Veldhuizen在这里有一个很好的教程。
一般来说,C ++编程的一个很好的资源是Andrei Alexandrescu撰写的Modern C ++ Design,ISBN-13:9780201704310. 这本书将元编程与其他模板技术结合在一起。特别是对于元编程,请参见第2.1节"编译时断言",第2.4节"将整数常量映射到类型",第2.6节"类型选择",第2.7节"在编译时检测可转换性和继承",第2.9节" NullType"和" EmptyType"。和2.10"类型特征"。
我发现的最好的中间/高级资源是David Abrahams和Aleksey Gurtovoy编写的C ++模板元编程,ISBN-13:9780321227256
如果我们只喜欢一本书,请获取《 C ++模板:完整指南》,因为它通常还是模板的权威参考。
不会有很多书籍,因为有很多经验的人是有限的。模板元编程实际上是在2000年的第一个C ++模板编程研讨会附近开始的,到目前为止,许多有名的作者参加了会议。 (IIRC,Andrei没有。)这些先驱者对该领域产生了很大的影响,现在基本上应该写什么。就个人而言,我会建议Vandevoorde&Josuttis。如果我们是该领域的新手,则Alexandrescu的书很难读。