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


10

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

以下はアマゾンの本の説明からです:

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

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

読者は学ぶ

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

2
C ++言語自体はゆっくりとしか変化せず(大きな変更は10年ごとにしか行われません)、大部分は下位互換性があるため、C ++の本はそれほど速く経っていません。
Bart van Ingen Schenau 2014年

回答:


12

更新しました(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)の詳細。


3
C ++ 11以前のTMPに関する議論の問題は、TMPがカバーされないconstexprため、constexpr関数や型がはるかに適している場合でも、すべてのメタプログラミングにTMPを推奨することです。
Ben Voigt 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.