C++ テンプレート メタプログラミングへの最良の入門?[閉まっている]
-
02-07-2019 - |
質問
静的メタプログラミング (別名「テンプレート メタプログラミング」) は、コンパイル時にプログラムを実行できるようにする優れた 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 サイト、オンライン コースウェアなど) は何でしょうか?
解決
【私自身の質問に答える】
私がこれまでに見つけた最良の入門書は、第 10 章「C++ の静的メタプログラミング」です。 生成的プログラミング、メソッド、ツール、およびアプリケーション クシシュトフ チャルネツキ、ウルリッヒ W.アイゼネッカー、ISBN-13:9780201309775;および第 17 章「メタプログラム」 C++ テンプレート:完全ガイド David Vandevoorder、Nicolai M.ジョスティス、ISBN-13:9780201734843。
Todd Veldhuizen による優れたチュートリアル ここ.
C++ プログラミング全般に関する優れたリソースは次のとおりです。 最新の C++ 設計 アンドレイ・アレクサンドルスク著、ISBN-13:9780201704310。この本では、メタプログラミングと他のテンプレート技術を少し組み合わせています。特にメタプログラミングについては、セクション 2.1「コンパイル時のアサーション」、2.4「整数定数の型へのマッピング」、2.6「型の選択」、2.7「コンパイル時の変換可能性と継承の検出」、2.9 を参照してください。NullType
そして EmptyType
」と2.10「タイプ特性」。
私が見つけた最高の中級/上級リソースは、 C++ テンプレートのメタプログラミング David Abrahams および Aleksey Gurtovoy 著、ISBN-13:9780321227256
1冊だけご希望の場合は、 C++ テンプレート:完全ガイド これは、テンプレート全般の最終的なリファレンスでもあるためです。
他のヒント
アンドレイ・アレクサンドルスクさんの 最新の C++ 設計 この本では、高速かつ効率的な最新の C++ コードのためのさまざまなトリックやその他のトリックが説明されており、 ロキ 図書館。
また、言及する価値があるのは、 ブースト これらのライブラリは、これらのテクニックを多用しており、通常は学習するのに非常に高品質です (ただし、非常に密度の高いものもあります)。
最新の C++ 設計, Alexandrescu による素晴らしい本とデザイン パターン フレームワーク。警告ですが、この本を読んだ後、私は C++ を使うのをやめて、「なんだ、もっと良い言語を選んで無料で手に入れればいいのに」と思いました。
すぐに思い浮かぶ良書は次の 2 冊です。
- モダン C++ デザイン / Andrei Alexandrescu (名前に反して、実際には 7 年前のものです!)
- C++ テンプレート:ザ・コンプリートガイド / Vandevoorde & Josuttis
これはかなり奥深い分野なので、Web サイトよりも、これらの書籍のような良書を読むことをお勧めします。より高度なテクニックの中には、コードがどのように機能するかを理解するために、しばらくコードを勉強する必要があるものもあります。
豊富な経験を持つ人のリストは限られているため、書籍のリストはそれほど多くありません。テンプレート メタプログラミングは、2000 年の最初の C++ テンプレート プログラミング ワークショップの頃に本格的に始まり、これまでに名前が挙がった著者の多くが参加しました。(IIRC、アンドレイはそうではありませんでした。)これらの先駆者はこの分野に大きな影響を与え、基本的に書かれるべきものは現在書かれています。個人的には、Vandevoorde & Josuttis にアドバイスします。Alexandrescu の本は、この分野に慣れていない人にとっては難しい本です。
Veldhuizen のオリジナルの論文は優れていました。一冊の本を読みたい場合は、Vandevoorde の『C++ テンプレート コンプリート ガイド』という本があります。修士課程の準備ができたら、Alexandrescu の Modern C++ Design を試してください。
Google Alexandrescu、最新の C++ デザイン:適用される汎用プログラミングとデザインパターン