[解決済み] C++のテンプレートメタプログラミングの入門に最適?[クローズド]
質問
静的メタプログラミング(別名:テンプレートメタプログラミング)は、コンパイル時にプログラムの実行を可能にする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 " を参照してください。
NullType
と
EmptyType
および2.10 "型特性"を参照してください。
私が見つけた最も優れた中級/上級者向けのリソースは C++ テンプレート メタプログラミング David Abrahams と Aleksey Gurtovoy 著、 ISBN-13: 9780321227256 です。
もし、一冊の本で済ませたいのであれば、以下の本をお求めください。 C++ テンプレート。完全ガイド を読んでください。この本はテンプレート全般に関する決定的なリファレンスでもあります。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] メタプログラミングとは何ですか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] C++テンプレート関数定義の.CPPファイルへの格納
-
[解決済み】C++テンプレートのtypedef
-
[解決済み】テンプレートのテンプレート・パラメーターの使い方は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 配列のベクトルを扱う正しい方法