この本C++ Templates:The Complete Guide、(c)2002は私にとって非常に魅力的に見えますが、12歳なので心配です古くなっている可能性があります。最近1年前の非常に好意的なAmazonレビューがいくつかありますが、C++テンプレートに他の最近のタイトルはありません。 2002年に発行されたテンプレートに関する本(特にSTLに関する本ではなく)に、たとえばC++ 11によって置き換えられたり追加された構文や概念があるかどうかは誰にもわかりますか?
以下は Amazonの本の説明 からのものです。
テンプレートはC++の最も強力な機能の1つですが、無視され、誤解され、誤用されがちです。 C++テンプレート:コンプリートガイドは、テンプレートを使用して、よりクリーンで高速でスマートなソフトウェアをより効率的に構築および維持する理由、時期、および方法を明確に理解できるようにソフトウェアアーキテクトとエンジニアに提供します。
C++テンプレートは、基本的な概念と言語機能に関する洞察に満ちたチュートリアルから始まります。本の残りの部分は包括的なリファレンスとして役立ち、最初に言語の詳細に焦点を当て、次に幅広いコーディング手法に焦点を当て、最後にテンプレートの高度なアプリケーションに焦点を当てています。本全体で使用されている例は、抽象的な概念を示し、ベストプラクティスを示しています。
読者は学ぶ
- テンプレートの正確な動作
- テンプレートに関連する落とし穴を回避する方法
- イディオムとテクニック、基本から以前に文書化されていないものまで
- パフォーマンスや安全性を脅かすことなくソースコードを再利用する方法
- C++プログラムの効率を上げる方法
- より柔軟で保守可能なソフトウェアを作成する方法
更新しました(2016/08/24)
C++ 11に焦点を当てた推奨記事:
C++のSFINAE概念の紹介:クラスメンバーのコンパイル時の内省(Jean Guegant)
数か月前のC++テンプレートメタプログラミングの学習者として、この本を読むことをお勧めします。
C++ 11は含まれていませんが、コンパイラーがテンプレートコードを処理する方法に関する構文とC++仕様を示しています。この本はあまり知られていない多くのコーナーをカバーしており、メタプログラミングが関係するかどうかにかかわらず、C++テンプレートを実質的に使用する必要がある場合に重要になります。
C++ 11の欠けている部分は次のとおりです。
is_*
が表示されます。decltype
。 http://en.cppreference.com/w/cpp/language/decltypedeclval
。 http://en.cppreference.com/w/cpp/utility/declvalmove
http://en.cppreference.com/w/cpp/utility/moveforward
http://en.cppreference.com/w/cpp/utility/forwardStackoverflowに貼り付けられたコードに多く見られる構成があります:std::enable_if
。ただし、実際には、One-Definition RuleとSFINAEのため、これを使用するのは非常に難しいと思います。この本は基本を説明しているので、この本が重要なのはこのためです。
実質的にクロスプラットフォームライブラリでC++テンプレートを使用する場合は、さまざまなコンパイラでコードをテストコンパイルする必要があります。これは、コンパイラごとにC++仕様への準拠レベルが異なるためです。一方で正常にコンパイルされるコードは、もう一方によって拒否される可能性があり、場合によっては、それを受け入れるコンパイラが仕様に違反するものになります。
これがこの本を読んだときの私の読書ノートです。お役に立てれば幸いです。
読書ノート-C++テンプレート-完全ガイド(2003)
5章と6章-これらの2つの章は非常に憂鬱です。テンプレートを使用する準備ができたら、スキップしてから元に戻ることができます。
パートII(Ch 8-Ch ???)高度なもののセクション。
8章-その他のルール
8.3.1章(12番目の印刷の106ページ)では、初めてSFINAEについて言及しています。
11-テンプレート引数の控除
12.4章-部分クラステンプレートの特殊化。
パートIII(17章-Ch ???)メタプログラミング。
17章-入門的な関数プログラミングから始まります。
アプリ。 A.3-One-Definition Rule(ODR)の詳細。