C++ 模板元编程的最佳介绍? [关闭]

Posted

技术标签:

【中文标题】C++ 模板元编程的最佳介绍? [关闭]【英文标题】:Best introduction to C++ template metaprogramming? [closed] 【发布时间】:2010-09-11 20:30:21 【问题描述】:

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

【问题讨论】:

灯泡“关闭”或“打开”? 关闭。绝对关闭。 【参考方案1】:

[回答我自己的问题]

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

Todd Veldhuizen 有一个很棒的教程here。

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

我发现的最好的中级/高级资源是 C++ 模板元编程,作者 David Abrahams 和 Aleksey Gurtovoy,ISBN-13:9780321227256

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

【讨论】:

Todd Veldhuizen 作品的链接已过时。 我相信它是这样的:www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/… 链接已修复,谢谢! 链接又断了! 谢谢@jwfearn,我读了这篇文章,虽然我觉得这篇文章更有趣:youtube.com/watch?v=Am2is2QCvxY(它有两个部分)。这是 Walter E. Brown 的演讲:现代模板元编程:纲要【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

“什么鬼,我可以选择更好的语言并免费获得它”嗯,你是什么意思?我对“免费”特别困惑。您还想到了什么其他语言? C++ 模板元编程为您提供了各种新功能,例如将类型或类型列表作为参数传递等。这些功能中的大多数都存在于诸如 python 之类的动态类型语言中,并且语法更好。 如果您正在寻找一种可以快速编写正确程序的语言,Python 比 C++ 更好。如果您需要 C++ 提供的其他一些东西,向 C++ 添加类似 Lisp 的功能可能比尝试 C++ 化另一种语言更好。【参考方案4】:

我想到的两本好书是:

Modern C++ Design / Andrei Alexandrescu(尽管名字叫它实际上已经 7 岁了!) C++ 模板:完整指南 / Vandevoorde & Josuttis

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

Veldhuizen 的原始论文很好。如果您想看一整本书,那么有 Vandevoorde 的书“C++ 模板完整指南”。当您准备好攻读硕士课程时,不妨试试 Alexandrescu 的现代 C++ 设计。

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于C++ 模板元编程的最佳介绍? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++模板元编程深度解析:探索编译时计算的神奇之旅

C++ 高阶操作:模板元编程

万字长文 | 最好的 C++ 模板元编程干货!

初识C++模板元编程(Template Mega Programming)

C++ 和 D 中的元编程

C++元编程的学习笔记