【问题标题】:Best introduction to C++ template metaprogramming? [closed]C++ 模板元编程的最佳介绍? [关闭]
【发布时间】: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++ 静态元编程的知识,最好的资源是什么(书籍、网站、在线课件等等)?

【问题讨论】:

  • 灯泡“关闭”或“打开”?
  • 关闭。绝对关闭。

标签: c++ templates metaprogramming


【解决方案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++ 模板:完整指南,因为它也是一般模板的权威参考。

【讨论】:

【解决方案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++ 设计:应用通用编程和设计模式

            【讨论】:

              猜你喜欢
              • 2011-02-01
              • 2022-06-11
              • 2011-06-19
              • 1970-01-01
              • 1970-01-01
              • 2013-07-16
              • 2010-11-26
              • 1970-01-01
              相关资源
              最近更新 更多