情報技術 > プログラミング > More C++ Idioms

序文

編集
 
「C++ はあまりに『熟練者に優しく』なってしまった」(C++ has indeed become too "expert friendly")
— Bjarne Stroustrup ,  The Problem with Programming, Technology Review, Nov 2006.

Stroustrup 氏の言は真実である。なぜなら熟練者は言語のイディオムに深く精通しているからである。プログラマが理解するイディオムの増加に従って、言語は彼あるいは彼女にとってよりフレンドリーになる。この open content book の目的はほどほどに C++ に精通しているプログラマに対して現代的な C++ のイディオムを提示し、C++ をよりずっとフレンドリーに感じるレベルにまで知識を引き上げる助けと成る事である。本書は熟練した C++ プログラマが C++ を使ってプログラミングや設計を行う際に用いる事の多い再利用可能なイディオムの網羅的なカタログと成るよう意図されている。これは、それらのテクニックや語彙をひとまとめにしようという取り組みである。本書は、イディオムを「名前-意図-動機-解法」という簡潔で速習しやすい規則的なフォーマットで記述されている。その性質上、イディオムは何回も C++ コミュニティや出版物の中に現れる傾向にある。可能であればオリジナルの原点を参照するよう努力を払ったが、参照が不完全であったり誤りであることを見つけたら、自由に示唆してもらうか改善を施して欲しい。

C++ の知識の再利用可能な断片をカタログ化しようという地平は拓かれた(GoF がオブジェクト指向パターンに対して行ったように)。ここでの目標は、まずは現代的な C++ のイディオムの網羅的なカタログを構築し、次いでちょうどパターンランゲージのようにイディオムランゲージに進化させることである。最後に、この本の内容は GNU Free Documentation License の下で再配布可能である。

対象とする読者: C++ と関連するパラダイムについてほどほどのレベルの知識を持つ人全て

追加情報

編集

著者リスト | 著者向けガイドライン | 翻訳の方針

目次

編集
進捗状況の凡例
  数行の文章か目次があります。
 :本文が少しあります。
 :本文が半分ほどあります。
 : 間もなく完成します。
 : 一応完成しています。

注意: 各イディオムの別名は括弧内に列挙されている。

  1. Adapter Template
  2. Address Of
  3. 代数的階層(Algebraic Hierarchy)
  4. Attach by Initialization
  5. Barton-Nackman トリック(Barton-Nackman trick)
  6. メンバによる基本クラスの初期化(Base-from-Member)
  7. Boost mutant
  8. 初期化中の仮想関数呼び出し(Calling Virtuals During Initialization)
  9. 能力照会(Capability Query)
  10. チェック付きdelete(Checked delete)
  11. 空にして最小化(Clear-and-minimize)
  12. メンバテンプレートによる型変換(Coercion by Member Template)
  13. コンパイル時制御構造(Compile Time Control Structures)
  14. Computational Constructor
  15. 具象データ型(Concrete Data Type)
  16. Const auto_ptr
  17. 初回使用時生成(Construct On First Use)
  18. 生成の追跡(Construction Tracker)
  19. コピーして swap(Copy-and-swap)
  20. Copy-on-write
  21. 計数ボディ(侵襲的参照回数計測)(Counted Body (intrusive reference counting))
  22. 奇妙に再帰したテンプレートパターン(Curiously Recurring Template Pattern)
  23. 独立計数ボディ(非侵襲的参照回数計測)(Detached Counted Body (non-intrusive reference couting))
  24. Empty Base Optimization
  25. Emulated Exception
  26. enable-if
  27. 封筒・便箋(Envelope Letter)
  28. 消去・削除(Erase-Remove)
  29. Examplar
  30. ポインタ参照前後での実行(Execute-Around Pointer)
  31. Export Guard Macro
  32. 式テンプレート(Expression-template)
  33. Fake Vtable
  34. 高速 Pimpl(Fast Pimpl)
  35. Final Class
  36. Forward Declare First
  37. Free Function Allocators
  38. Friendship and the Attorney-Client
  39. Function Object
  40. 汎用コンテナ作成用イディオム(Generic Container Idioms)
  41. Pimpl (ハンドル・ボディ(Handle Body), コンパイル防壁(Compilation Firewall), チェシャ猫(Cheshire Cat))
  42. インクルードガードマクロ(Include Guard Macro)
  43. inline ガードマクロ(Inline Guard Macro)
  44. 内部クラス(Inner Class)
  45. 整数から型(Int-To-Type)
  46. インタフェースクラス(Interface Class)
  47. 反復子対(Iterator Pair)
  48. friend 関数の生成(Making New Friends)
  49. メタ関数(Metafunction)
  50. 所有権移動コンストラクタ(Move Constructor)
  51. 複文マクロ(Multi-statement Macro)
  52. Multiple Member Initialization
  53. 名前付きコンストラクタ(Named Constructor)
  54. Named External Argument
  55. Named Loop
  56. 名前付きパラメータ(Named Parameter)
  57. 名前付きテンプレートパラメータ(Named Template Parameters)
  58. 小粋なカウンタ(Nifty Counter) (シュワルツカウンタ(Schwarz Counter))
  59. コピー禁止ミックスイン(Non-copyable Mixin)
  60. Non-member get
  61. 非メンバ非フレンド関数(Non-member Non-friend Function)
  62. throw しない swap(Non-throwing swap)
  63. 非仮想インタフェース(Non-Virtual Interface) (public な多重定義非仮想関数による protected な非多重定義仮想関数の呼び出し(Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals))
  64. nullptr
  65. オブジェクト生成器(Object Generator)
  66. Object Template
  67. Overload Set Creation
  68. パラメータ化された基本クラス(Parameterized Base Class) (パラメータ化された継承(Parameterized Inheritance))
  69. メタ関数ラッパ(Meta-function wrapper)
  70. ポリシーの複製(Policy Clone) (メタ関数ラッパ(Meta-function wrapper))
  71. ポリシーに基づくクラス設計(Policy-based Class Design)
  72. 多態的例外(Polymorphic Exception)
  73. Recursive Type Composition
  74. リソース獲得は初期化である(Resource Acquisition Is Initialization) (RAII, オブジェクト生存期間前後での実行(Execute-Around Object), スコープ内ロック(Scoped Locking))
  75. リソースの返値(Resource Return)
  76. Return Type Resolver
  77. 実行時の静的初期化順序に関するイディオム(Runtime Static Initialization Order Idioms)
  78. 安全な bool(Safe bool)
  79. スコープ防壁(Scope Guard)
  80. 置き換え失敗はエラーにあらず(Substitution Failure Is Not An Error(SFINAE))
  81. Shortening Long Template Names
  82. 縮めて合わせる(Shrink-to-fit)
  83. Small Object Optimization
  84. スマートポインタ(Smart Pointer)
  85. Storage Class Tracker
  86. タグによる分配(Tag Dispatching)
  87. Temporary Base Class
  88. The result_of technique
  89. 薄いテンプレート(Thin Template)
  90. Trailing Parens for Method Chaining for Named parameter
  91. 特性(Traits)
  92. Type Erasure
  93. 型生成器(Type Generator) (テンプレート化された typedef(Templated Typedef))
  94. Type Safe Enum
  95. Type Selection
  96. 仮想コンストラクタ(Virtual Constructor)
  97. 仮想フレンド関数(Virtual Friend Function)