116

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

4

8 回答 8

115

[回答我自己的问题]

到目前为止,我发现的最好的介绍是第 10 章,“C++ 中的静态元编程”,来自Krzysztof Czarnecki 和 Ulrich W. Eisenecker 的Generative Programming, Methods, Tools, and Applications,ISBN-13:9780201309775;和C++ 模板的第 17 章“元程序”: David Vandevoorder 和 Nicolai M. Josuttis 的完整指南,ISBN-13:9780201734843。

替代文字 替代文字 替代文字 替代文字

Todd Veldhuizen 在这里有一个很好的教程。

一般而言,C++ 编程的一个很好的资源是Andrei Alexandrescu 的Modern C++ Design,ISBN-13:9780201704310。这本书混合了一些元编程和其他模板技术。对于元编程,请参阅第 2.1 节“编译时断言”、第 2.4 节“将积分常量映射到类型”、第 2.6 节“类型选择”、第 2.7 节“在编译时检测可转换性和继承”、第 2.9 节“NullTypeEmptyType”以及第 2.10 节“类型特征” ”。

我发现的最好的中级/高级资源是David Abrahams 和 Aleksey Gurtovoy的C++ Template Metaprogramming ,ISBN-13:9780321227256

如果您只喜欢一本书,请获取C++ 模板:完整指南,因为它也是一般模板的权威参考。

于 2008-09-21T21:59:49.127 回答
25

Andrei Alexandrescu 的《现代 C++ 设计》一书涵盖了许多用于快速高效的现代 C++ 代码的技巧和其他技巧,并且是Loki库的基础。

另外值得一提的是Boost库,它大量使用这些技术并且通常具有非常高的学习质量(尽管有些非常密集)。

于 2008-09-21T21:56:19.290 回答
11

Modern C++ Design,Alexandrescu 的一本精彩的书籍和设计模式框架。警告一句,读完这本书后,我停止使用 C++,并想“这算什么,我可以选择一种更好的语言并免费获得它”。

于 2008-09-21T21:56:47.730 回答
6

脑海中浮现的两本好书是:

  • 现代 C++ 设计 / Andrei Alexandrescu(尽管有这个名字,它实际上已经 7 岁了!)
  • C++ 模板:完整指南 / Vandevoorde & Josuttis

这是一个相当深入的领域,所以绝对推荐像其中一本这样的好书而不是网站。一些更高级的技术将让您研究代码一段时间以弄清楚它们是如何工作的!

于 2008-09-21T21:59:23.013 回答
5

现代 C++是我读过的最好的介绍之一。它涵盖了模板元编程的实际有用示例。另请查看配套库Loki

于 2008-09-21T21:54:51.290 回答
5

不会有很多书单,因为有很多经验的人的名单是有限的。模板元编程在 2000 年的第一届 C++ 模板编程研讨会中真正开始,到目前为止,许多作者都参加了会议。(IIRC,Andrei 没有。)这些先驱者极大地影响了这个领域,基本上应该写的东西现在都写了。就个人而言,我会建议 Vandevoorde & Josuttis。如果您是该领域的新手,Alexandrescu 的书是一本难读的书。

于 2008-09-21T22:40:25.677 回答
4

google Alexandrescu,现代 C++ 设计:应用的通用编程和设计模式

于 2008-09-21T21:53:54.273 回答
4

Veldhuizen 的原始论文很好。如果您想看一整本书,那么这里有 Vandevoorde 的书“C++ 模板完整指南”。当你准备好学习硕士课程时,试试 Alexandrescu 的 Modern C++ Design。

于 2008-09-21T21:56:39.930 回答