静的メタプログラミング(別名「テンプレートメタプログラミング」)は、コンパイル時にプログラムを実行できる優れた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サイト、オンラインコースウェアなど)は何ですか?
[自分の質問に答える]
これまでに見つけた最良の紹介は、Krzysztof CzarneckiによるGenerative Programming、Methods、Tools、およびApplicationsの第10章「C++の静的メタプログラミング」です。およびUlrich W. Eisenecker、ISBN-13:9780201309775; ISBN-13:9780201734843のDavid VandevoorderとNicolai M. JosuttisによるC++テンプレート:The Complete Guideの第17章「メタプログラム」。
Todd Veldhuizenには素晴らしいチュートリアルがあります こちら 。
C++プログラミングの一般的なリソースは、Andrei Alexandrescu、ISBN-13:9780201704310によるModern C++ Designです。この本は、他のテンプレートとメタプログラミングを少し混ぜたものです。テクニック。特にメタプログラミングについては、セクション2.1「コンパイル時のアサーション」、2.4「型への整数定数のマッピング」、2.6「型の選択」、2.7「コンパイル時の変換性と継承の検出」、2.9「NullType
EmptyType
"および2.10" Type Traits "。
私が見つけた最高の中間/高度なリソースは、C++ Template MetaprogrammingDavid Abrahams and Aleksey Gurtovoy、ISBN-13:9780321227256
1冊の本だけが必要な場合は、C++ Templates:The Complete Guideを入手してください。これは、一般的なテンプレートの決定的なリファレンスでもあるためです。
Andrei Alexandrescuの Modern C++ Design 本は、スピーディで効率的な最新のC++コードのための多くのトリックとその他のトリックをカバーしており、 Loki ライブラリの基礎となっています。
また、言及する価値があるのは Boost ライブラリです。これらのテクニックは頻繁に使用され、通常は非常に高品質で学習できます(ただし、一部は非常に高密度です)。
Modern C++ Design 、Alexandrescuによる素晴らしい本とデザインパターンフレームワーク。警告の言葉、この本を読んだ後、私はC++をやめ、「一体、もっと良い言語を選んで無料で入手できる」と考えました。
思い浮かぶ2つの良い本は次のとおりです。
これは非常に詳細な分野なので、これらのいずれかのような優れた本は、ウェブサイトで間違いなく推奨されています。より高度なテクニックのいくつかは、しばらくの間コードを調べて、それらがどのように機能するかを理解する必要があります!
多くの経験を持つ人のリストは限られているため、本の大きなリストはありません。テンプレートメタプログラミングは、2000年に最初のC++テンプレートプログラミングワークショップを中心に本格的に開始され、これまでに挙げられた多くの著者が参加しました。 (IIRC、Andreiはしませんでした。)これらの先駆者はこの分野に大きな影響を与え、基本的には書かれるべきことが書かれています。個人的には、Vandevoorde&Josuttisにアドバイスします。 Alexandrescu'sは、この分野に慣れていない人にとっては難しい本です。
Modern C++ は、私が読んだ中で最も優れた紹介の1つです。テンプレートのメタプログラミングの実際の有用な例をカバーしています。また、コンパニオンライブラリ Loki もご覧ください。
google Alexandrescu、Modern C++ Design:Generic Programming and Design Patterns Applied
Veldhuizenのオリジナルの論文は良かった。本全体を読みたい場合は、Vandevoordeの本「C++ Templates Complete Guide」があります。そして、修士課程の準備ができたら、AlexandrescuのModern C++ Designを試してください。