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++ と関連するパラダイムについてほどほどのレベルの知識を持つ人誰でも |
[編集] 追加情報
著者リスト | 著者向けガイドライン | 翻訳の方針
[編集] 目次
- ポリシーの複製(Policy Clone)
(2007-10-19) - メンバテンプレートによる型変換(Coercion by Member Template)
(2007-10-20) - スコープ防壁(Scope Guard)
(2007-10-21) - メタ関数ラッパ(Meta-function wrapper)
(2007-10-19) - 式テンプレート(Expression-template)
(2007-10-22) - コピー禁止ミックスイン(Non-copyable Mixin)
(2007-10-24) - 奇妙に再帰したテンプレートパターン(Curiously Recurring Template Pattern)
(2007-10-24) - パラメータ化された基本クラス(Parameterized Base Class)
(2007-10-25) - パラメータ化された継承(Parameterized Inheritance)
(2007-10-25) - 所有権移動コンストラクタ(Move Constructor)
(2007-10-26) - 安全な bool(Safe bool)
(2007-10-28) - メンバによる基本クラスの初期化(Base-from-Member)
(2007-10-31) - 生成の追跡(Construction Tracker)
(2007-11-02) - 実行時の静的初期化順序に関するイディオム(Runtime Static Initialization Order Idioms)
(2007-11-09) - 初回使用時生成(Construct On First Use)
(2007-11-09) - 小粋なカウンタ(Nifty Counter)
(2007-11-09) - シュワルツカウンタ(Schwarz Counter)
(2007-11-09) - 初期化中の仮想関数呼び出し(Calling Virtuals During Initialization)
(2008-03-28) - ポインタ参照前後での実行(Execute-Around Pointer)
(2008-03-28) - 薄いテンプレート(Thin Template)
(2008-03-28) - 初期化中の動的束縛(Dynamic Binding During Initialization)
(2008-03-28) - throw しない swap(Non-throwing swap)
(2008-04-05) - コピーして swap(Copy-and-swap)
(2008-04-05) - 縮めて合わせる(Shrink-to-fit)
(2008-04-08) - 空にして最小化(Clear-and-minimize)
(2008-04-08) - 消去・削除(Erase-Remove)
(2008-04-12) - スマートポインタ(Smart Pointer)
(2008-04-14) - Const auto_ptr
(2008-04-15) - チェック付きdelete(Checked delete)
(2008-04-15) - 内部クラス(Inner Class)
(2008-04-16) - 反復子対(Iterator Pair)
(2008-04-20) - リソースの返値(Resource Return)
(2008-04-20) - nullptr
(2008-04-22) - 汎用コンテナ作成用イディオム(Generic Container Idioms)
(2008-05-02) - インクルードガードマクロ(Include Guard Macro)
(2008-05-02) - inline ガードマクロ(Inline Guard Macro)
(2008-05-27) - 複文マクロ(Multi-statement Macro)
(2008-05-28) - friend 関数の生成(Making New Friends)
(2008-05-29) - リソース獲得は初期化である(Resource Acquisition Is Initialization)
(2008-05-29) - オブジェクト生存期間前後での実行(Execute-Around Object)
(2008-05-29) - スコープ内ロック(Scoped Locking)
(2008-05-29) - インタフェースクラス(Interface Class)
(2008-06-12) - 能力照会(Capability Query)
(2008-06-12) - ハンドル・ボディ(Handle Body)
(2009-08-18) - Pimpl
(2009-08-18) - チェシャ猫(Cheshire Cat)
(2009-08-18) - コンパイル防壁(Compilation Firewall)
(2009-08-18) - 計数ボディ(侵襲的参照回数計測)(Counted Body (intrusive reference couting))
- 参照回数計測(侵襲的)(Reference Counting (intrusive))
- 独立計数ボディ(非侵襲的参照回数計測)(Detached Counted Body (non-intrusive reference couting))
- 封筒・便箋(Envelope Letter)
- 代数的階層(Algebraic Hierarchy)
(2008-06-28) - 仮想コンストラクタ(Virtual Constructor)
(2008-06-29) - 具象データ型(Concrete Data Type)
- 非仮想インタフェース(Non-Virtual Interface)
- 名前付きコンストラクタ(Named Constructor)
- 名前付きパラメータ(Named Parameter)
- 多態的例外(Polymorphic Exception)
- public な多重定義非仮想関数による protected な非多重定義仮想関数の呼び出し(Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals)
- 仮想フレンド関数(Virtual Friend Function)
- SFINAE
- 置き換え失敗はエラーにあらず(Substitution Failure Is Not An Error)
- 高速 Pimpl(Fast Pimpl)
- タグによる分配(Tag Dispatching)
- Enable if
- 特性(Traits)
- 非メンバ非フレンド関数(Non-member Non-friend Function)
- Barton-Nackman トリック(Barton-Nackman trick)
- Type Generator
- Object Generator
- 名前付きテンプレートパラメータ(Named Template Parameters)
- Adapter Template
- Storage Class Tracker
- Fake Vtable
- Overload Set Creation
- Address Of
- Compile Time Control Structures
- Type Selection
- Temporary Base Class
- Computational Constructor
- 型安全な enum(Type Safe Enum)
- Attach by Initialization
- Object Template
- Non-member get()
- Named External Argument
- Forward Declare First
- Function Object
- Examplar
- ポリシーに基づくクラス設計(Policy-based Class Design)
- Boost mutant
- Multiple Member Initialization
- Friendship and the Attorney-Client
- Trailing Parens for Method Chaining for Named parameter
- Final Class
- Copy-on-write
- Shortening Long Template Names
- Export Gurad Macro