C++模板元编程最佳入门指南?

122

静态元编程(也称为“模板元编程”)是一种优秀的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++静态元编程的知识,最好的资源(书籍、网站、在线课程等)是什么?


50
灯泡是亮着的还是灭了? - horseyguy
42
关闭。绝对关闭。 - Thomas Eding
8个回答

120

[回答自己的问题]

目前我发现最好的介绍是Krzysztof Czarnecki和Ulrich W.Eisenecker所著的《生成式编程方法、工具和应用》第10章“C++中的静态元编程”,ISBN-13:9780201309775;以及David Vandevoorder和Nicolai M.Josuttis所著的《C++模板:完全指南》第17章“元程序”,ISBN-13:9780201734843。

alt text alt text alt text alt text

Todd Veldhuizen在这里有一份优秀的教程here

Andrei Alexandrescu的《现代C ++设计》ISBN-13:9780201704310是一个关于C ++编程的好资源。该书将元编程与其他模板技术混合在一起。对于特别是元编程方面,请参阅第2.1节“编译时断言”,第2.4节“将整数常量映射到类型”,第2.6节“类型选择”,第2.7节“在编译时检测可转换性和继承性”,第2.9节“NullTypeEmptyType”以及第2.10节“类型特征”。

我发现的最好的中高级资源是David Abrahams和Aleksey Gurtovoy所著的《C++模板元编程》ISBN-13:9780321227256

如果您只想要一本书,那么就选 C++ Templates: The Complete Guide,因为它也是模板的权威参考资料。


2
Todd Veldhuizen的链接已经失效。 - John R. Strohm
1
我认为这是:http://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/meta-art.html - 0fnt
2
链接已修复,谢谢! - jwfearn
链接又坏了! - Paul
1
谢谢@jwfearn,我看了这篇文章,不过我觉得这个更有趣:https://www.youtube.com/watch?v=Am2is2QCvxY(它有两部分)。这是Walter E. Brown的演讲:现代模板元编程:一本手册。 - Paul
显示剩余2条评论

25
Andrei Alexandrescu的现代C++设计一书涵盖了很多这方面的技巧和其他快速高效的现代C++代码,并是Loki库的基础。
另外值得一提的是Boost库,它们广泛使用这些技术,并且通常非常高质量,适合学习(尽管有些内容比较深奥)。

12

《现代C++设计》是Alexandrescu编写的一本杰出的书籍和设计模式框架。需要注意的是,读完这本书后我不再使用C++了,想着“我可以选择一种更好的语言并免费获得它,怎么会选择C++呢?”


6
什么意思,我有点困惑“for free”的含义是什么?你想使用哪种语言呢?“What the heck, I can just pick a better language and get it for free.”的意思是:“我可以选择一种更好的语言,并且免费获得它。” - Pop Catalin
13
C++模板元编程可以让你获得各种新的能力,比如将类型或类型列表作为参数传递等。大部分这些能力在动态类型语言中如Python中也存在,只不过语法更加优美。 - Florian Bösch
1
如果你正在寻找一种能够快速编写正确程序的语言,Python比C++更好。如果你需要C++提供的其他功能,那么在C++中添加类似Lisp的能力可能比尝试将另一种语言转化为C++更好。 - David Thornley

7
我能想到的两本好书是:
  • 现代C++设计 / Andrei Alexandrescu(尽管书名中有“现代”二字,但实际上已经出版7年了!)
  • C++模板:完全指南 / Vandevoorde & Josuttis
这是一个相当深入的领域,因此强烈推荐像这样的好书,而不是网站。一些更高级的技术将让你花费一些时间来研究代码,以便理解它们的工作原理!

5

现代C++是我读过的最好的入门书之一。其中涵盖了实际有用的模板元编程示例。同时,您还可以查看配套库Loki


5

由于有经验的人不多,因此书籍清单并不是很长。模板元编程真正开始于2000年的第一届C++模板编程研讨会上,迄今为止已经有许多名作家参加了这个领域的探索。(如果我没记错的话,Andrei没有参加。)这些先驱对该领域产生了深远的影响,并且基本上应该写什么已经都写了出来。就个人而言,我建议阅读Vandevoorde & Josuttis的书籍。如果你刚入门,Alexandrescu的书可能会比较难懂。


4

谷歌的Alexandrescu所著《现代C++设计:通用编程和设计模式应用》


4

Veldhuizen的原始论文很好。如果你想要一本完整的书,那么可以参考Vandevoorde的书“C++ Templates Complete Guide”。当你准备好进行进阶学习时,可以尝试阅读Alexandrescu的《Modern C++ Design》。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接