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


112

静态元编程(也称为“模板元编程”)是一种很棒的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 ++静态元编程的更多信息,最好的资源是什么(书籍,网站,在线课件,等等)?


43
灯泡“关”或“开”?
horseyguy 2010年

36
关 绝对关闭。
Thomas Eding

Answers:


108

[回答我自己的问题]

到目前为止,我发现的最好的介绍是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。

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

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 ++模板元编程,ISBN-13:9780321227256

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


2
与Todd Veldhuizen的作品的链接已过时。
John R. Strohm 2012年


1
链接已修复,谢谢!
jwfearn 2013年

链接再次断开!
保罗

1
谢谢@jwfearn,尽管我发现这篇文章更有趣,但我还是读了该文章:youtube.com/watch ?v=Am2is2QCvxY (分为两部分)。这是Walter E. Brown的演讲:现代模板元编程:纲要
Paul

24

Andrei Alexandrescu的《Modern C ++ Design》一书涵盖了许多有关快速有效的现代C ++代码的技巧,也是Loki的基础。库。

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


12

Modern C ++ Design,Alexandrescu撰写的精彩著作和设计模式框架。值得一提的是,读完这本书后,我停止了使用C ++的工作,并想:“到底,我可以选择一种更好的语言并免费获得它”。


5
“哎呀,我可以选择一种更好的语言并免费获得它。”嗯,你是什么意思?我对“免费”感到特别困惑。您还打算使用什么其他语言?
Pop Catalin's

12
C ++模板元编程为您提供了各种新功能,例如传递类型或类型列表作为参数等。这些功能中的大多数都以动态类型的语言(如python)提供,并且语法更好。
FlorianBösch08年

1
如果您正在寻找一种可以快速编写正确程序的语言,那么Python比C ++更好。如果您需要C ++提供的其他一些功能,则向C ++添加类似Lisp的功能可能比尝试用C ++转换另一种语言更好。
David Thornley 2009年

6

我想到的两本好书是:

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

这是一个非常深入的领域,因此绝对建议在网站上推荐一本好书。一些更高级的技术将使您花一些时间研究代码以弄清楚它们是如何工作的!


5

现代C ++是我读过的最好的介绍之一。它涵盖了模板元编程的实际有用示例。还可以看看伴侣图书馆Loki


5

不会有大量的书籍,因为有很多经验的人是有限的。模板元编程实际上是在2000年的第一个C ++模板编程研讨会附近开始的,到目前为止,许多有名的作者参加了会议。(IIRC,Andrei没有。)这些先驱者对该领域产生了很大的影响,现在基本上应该写什么。就个人而言,我会建议Vandevoorde&Josuttis。如果您是该领域的新手,则Alexandrescu的书很难读。


4

Veldhuizen的原始论文很好。如果您要阅读整本书,则可以参考Vandevoorde的书“ C ++模板完整指南”。当您准备好攻读硕士课程时,请尝试Alexandrescu的Modern C ++ Design。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.