More C++ Idioms

出典: フリー教科書『ウィキブックス(Wikibooks)』

目次

[編集] 動機

ファイル:More CPP Idioms.gif 「C++ はあまりに『熟練者に優しく』なってしまった」(C++ has indeed become too "expert friendly")[1] --- Bjarne Stroustrup.

それは、熟練者が C++ のイディオムに密に親しんでいるからである。よりたくさんのイディオムを会得すれば、C++ はより優しくなる。そして、世の中には数百のイディオムがあるのだ!この open book の目的は、ほどほどに C++ に精通しているプログラマの知識を、よりずっと C++ が優しく感じるレベルに引き上げる助けとなることである。この open book は、熟練した C++ プログラマがプログラミングや設計を行う際にしばしば用いる再利用可能なイディオムの、網羅的なカタログとなるべく意図されている。これは、それらのテクニックや語彙をひとまとめにしようという取り組みである。この本では、イディオムは、名前-意図-動機-解法という簡潔で理解しやすい規則的なフォーマットで記述されている。

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

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

[編集] 追加情報

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

[編集] 目次

進捗状況の凡例

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

[編集] References

  1. ^ The Problem with Programming


このページ「More C++ Idioms」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。
ヘルプ
ブックの新規作成
他の言語