1. ホーム
  2. c++

[解決済み] C++のテンプレートメタプログラミングの入門に最適?[クローズド]

2022-05-17 11:35:11

質問

静的メタプログラミング(別名:テンプレートメタプログラミング)は、コンパイル時にプログラムの実行を可能にする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++の静的メタプログラミングについてもっと学びたい場合、どのような情報源(本、ウェブサイト、オンラインコースウェアなど)が最適でしょうか?

どのように解決するのですか?

[自分自身の質問に答える】。]

私がこれまでに見つけた最高の入門書は、10章、"Static Metaprogramming in C++" からです。 Generative Programming, Methods, Tools, and Applications (日本語訳) からです。 Krzysztof Czarnecki and Ulrich W. Eisenecker, ISBN-13: 9780201309775)、そして、第 17 章「メタプログラム」です。 C++テンプレート。完全ガイド David Vandevoorder and Nicolai M. Josuttis 著, ISBN-13: 9780201734843 の 17 章 "メタプログラム。

<イグ

Todd Veldhuizen による素晴らしいチュートリアルがあります。 ここで .

一般的なC++プログラミングのための良い資料は モダンC++デザイン 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++ テンプレート。完全ガイド を読んでください。この本はテンプレート全般に関する決定的なリファレンスでもあります。