web-dev-qa-db-ja.com

"C ++テンプレート:完全ガイド"(c)2002-C ++ 11で最新ですか?

この本C++ Templates:The Complete Guide、(c)2002は私にとって非常に魅力的に見えますが、12歳なので心配です古くなっている可能性があります。最近1年前の非常に好意的なAmazonレビューがいくつかありますが、C++テンプレートに他の最近のタイトルはありません。 2002年に発行されたテンプレートに関する本(特にSTLに関する本ではなく)に、たとえばC++ 11によって置き換えられたり追加された構文や概念があるかどうかは誰にもわかりますか?

以下は Amazonの本の説明 からのものです。

テンプレートはC++の最も強力な機能の1つですが、無視され、誤解され、誤用されがちです。 C++テンプレート:コンプリートガイドは、テンプレートを使用して、よりクリーンで高速でスマートなソフトウェアをより効率的に構築および維持する理由、時期、および方法を明確に理解できるようにソフトウェアアーキテクトとエンジニアに提供します。

C++テンプレートは、基本的な概念と言語機能に関する洞察に満ちたチュートリアルから始まります。本の残りの部分は包括的なリファレンスとして役立ち、最初に言語の詳細に焦点を当て、次に幅広いコーディング手法に焦点を当て、最後にテンプレートの高度なアプリケーションに焦点を当てています。本全体で使用されている例は、抽象的な概念を示し、ベストプラクティスを示しています。

読者は学ぶ

  • テンプレートの正確な動作
  • テンプレートに関連する落とし穴を回避する方法
  • イディオムとテクニック、基本から以前に文書化されていないものまで
  • パフォーマンスや安全性を脅かすことなくソースコードを再利用する方法
  • C++プログラムの効率を上げる方法
  • より柔軟で保守可能なソフトウェアを作成する方法
10
Chap

更新しました(2016/08/24)

C++ 11に焦点を当てた推奨記事:

C++のSFINAE概念の紹介:クラスメンバーのコンパイル時の内省(Jean Guegant)


数か月前のC++テンプレートメタプログラミングの学習者として、この本を読むことをお勧めします。

C++ 11は含まれていませんが、コンパイラーがテンプレートコードを処理する方法に関する構文とC++仕様を示しています。この本はあまり知られていない多くのコーナーをカバーしており、メタプログラミングが関係するかどうかにかかわらず、C++テンプレートを実質的に使用する必要がある場合に重要になります。


C++ 11の欠けている部分は次のとおりです。


Stackoverflowに貼り付けられたコードに多く見られる構成があります:std::enable_if。ただし、実際には、One-Definition RuleとSFINAEのため、これを使用するのは非常に難しいと思います。この本は基本を説明しているので、この本が重要なのはこのためです。


実質的にクロスプラットフォームライブラリでC++テンプレートを使用する場合は、さまざまなコンパイラでコードをテストコンパイルする必要があります。これは、コンパイラごとにC++仕様への準拠レベルが異なるためです。一方で正常にコンパイルされるコードは、もう一方によって拒否される可能性があり、場合によっては、それを受け入れるコンパイラが仕様に違反するものになります。


これがこの本を読んだときの私の読書ノートです。お役に立てれば幸いです。

読書ノート-C++テンプレート-完全ガイド(2003)

  • 2.5章-関数テンプレート-概要
    • 過負荷の解決とベストプラクティス
  • 3.3章-クラステンプレートの特殊化
  • 3.4章-部分的な専門化
    • あいまいさ(ODRエラー)とその解決方法。 ODR = One-Definition Rule
  • 4.3章-非タイプテンプレートパラメータの制限
    • 例:外部リンケージがある文字列リテラル
  • 5章と6章-これらの2つの章は非常に憂鬱です。テンプレートを使用する準備ができたら、スキップしてから元に戻ることができます。

  • パートII(Ch 8-Ch ???)高度なもののセクション。

  • 8章-その他のルール

    • Ch 3全体(クラステンプレート-基本)に既に精通しているプログラマーの場合、追加のルールは基本ルールと同じくらい重要で関連性があるため、Ch 8.1と8.2はCh 3の直後に読む必要があります。これはいくつかの痛みを節約します。
  • 8.3.1章(12番目の印刷の106ページ)では、初めてSFINAEについて言及しています。

  • 8.3章-このセクションでは、テンプレート引数の置換によって無意味な構文拡張が引き起こされた(したがって無効になり、その結果SFINAEが必要になる)多くの状況を紹介します。この章は、経験豊富なC++プログラマーにとっても、急な学習曲線を持っています。
  • 11-テンプレート引数の控除

    • Ch11には、同様に考案されたSFINAEアプリケーションのいくつかを理解するために必要な、考案されたテンプレート引数控除の例がいくつか含まれています。
  • 12.4章-部分クラステンプレートの特殊化。

    • これは、SFINAEアプリケーションでしばしば要求される内部メカニズムをカバーしています。

パートIII(17章-Ch ???)メタプログラミング。

  • 17章-入門的な関数プログラミングから始まります。

  • アプリ。 A.3-One-Definition Rule(ODR)の詳細。

12
rwong