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++ の静的メタプログラミングについてさらに学びたい場合、最良の情報源 (書籍、Web サイト、オンライン コースウェアなど) は何ですか?

4

8 に答える 8

115

【自問自答】

これまでに見つけた最良の紹介は、Krzysztof Czarnecki と Ulrich W. Eisenecker によるGenerative Programming, Methods, Tools, and Applications の第 10 章「C++ での静的メタプログラミング」 、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「NullTypeおよびEmptyType」および 2.10「型特性」を参照してください。 "。

私が見つけた最高の中級/上級リソースは、David Abrahams と Aleksey Gurtovoy によるC++ Template Metaprogramming、ISBN-13: 9780321227256 です。

1 冊だけの本が必要な場合は、C++ テンプレート: 完全ガイドを入手してください。これは、一般的なテンプレートの決定的なリファレンスでもあるためです。

于 2008-09-21T21:59:49.127 に答える
25

Andrei Alexandrescu のModern C++ Design book は、高速で効率的な最新の C++ コードを作成するための多くのトリックやその他のトリックをカバーしており、Lokiライブラリの基礎となっています。

また、 Boostライブラリについても言及する価値があります。これは、これらの手法を多用し、通常は学習するのに非常に高品質です (ただし、非常に密度の高いものもあります)。

于 2008-09-21T21:56:19.290 に答える
11

Modern C++ Designは、Alexandrescu による優れた本であり、デザイン パターン フレームワークです。警告の言葉、この本を読んだ後、私は C++ をやめるのをやめて、「なんてこった、もっと良い言語を選んで無料で手に入れることができる」と考えました。

于 2008-09-21T21:56:47.730 に答える
6

心に浮かぶ2つの良い本は次のとおりです。

  • Modern C++ Design / Andrei Alexandrescu (名前にもかかわらず、実際には 7 歳です!)
  • C++ テンプレート: 完全ガイド / Vandevoorde & Josuttis

これはかなり深い分野なので、ウェブサイトよりもこのような優れた本をお勧めします。より高度なテクニックの中には、それらがどのように機能するかを理解するためにしばらくの間コードを勉強しなければならないものがあります!

于 2008-09-21T21:59:23.013 に答える
5

経験豊富な人のリストは限られているので、本のリストは多くありません。テンプレートメタプログラミングは、2000年の最初のC ++テンプレートプログラミングワークショップの前後に実際に開始され、これまでに指名された多くの著者が参加しました。(IIRC、アンドレイはしませんでした。)これらの先駆者はこの分野に大きな影響を与え、基本的に何を書くべきかが書かれています。個人的には、Vandevoorde&Josuttisにアドバイスしたいと思います。Alexandrescu'sは、この分野に不慣れな人にとっては難しい本です。

于 2008-09-21T22:40:25.677 に答える
5

Modern C++は、私が読んだ中で最高の入門書の 1 つです。テンプレートのメタプログラミングの実際の有用な例をカバーしています。コンパニオン ライブラリLokiも参照してください。

于 2008-09-21T21:54:51.290 に答える
4

Google Alexandrescu、Modern C++ Design: Generic Programming and Design Patterns Applied

于 2008-09-21T21:53:54.273 に答える
4

Veldhuizen のオリジナルの論文は良かった。本全体が必要な場合は、Vandevorde の本「C++ Templates Complete Guide」があります。修士課程の準備が整ったら、Alexandrescu の Modern C++ Design を試してください。

于 2008-09-21T21:56:39.930 に答える