C++テンプレート完全ガイド

翔泳社(出版社) , ダビード・ヴァンデヴォールデ(著) , ニコライ・M・ジョスティス(著) , 津田義史(訳)

商品番号
119220
販売状態
発売中
納品形態
宅配便にてお届け
発売日
2010年02月10日
ISBN
9784798119229
判型
B5変
ページ数
480
キーワード
プログラミング  C++

販売価格:¥4,298(税込)

送料無料 在庫あり

本体価格の10%をポイント還元(会員限定)

ほしい物リストに追加

完全無欠のテンプレート実用技巧

本書は、C++テンプレートの使い方について、包括的かつ正確な情報を提供する本格的な書籍です。チュートリアルだけでなく、完全なリファレンスをも含んでおり、多くのサンプルコードを載せています。また、テンプレートの最も強力な機能は、単に使われていないか、あるいは誤解され、間違って使われることが非常に多くなっています。そこでソフトウェアアーキテクトとエンジニアのみなさんに、テンプレートをなぜ、いつ、どのように使うのかを示し、クリーンで高速かつ賢いソフトウェアをより効率的に構築し保守するための知識とノウハウを提供しています。すべてのC++プログラマには必須の1冊となります。

第1章 この本について

1.1 本書を読む前に知っておくべきこと
1.2 本書全体の構成
1.3 本書の読み方
1.4 プログラミングスタイルについて
1.5 標準と現実
1.6 サンプルコードと追加情報
1.7 ご感想をお寄せ下さい

● 第1部 基本

第2章 関数テンプレート

2.1 初めて見る関数テンプレート
 2.1.1 テンプレートを定義する
 2.1.2 テンプレートを使う
2.2 引数の推論
2.3 テンプレートパラメータ
2.4 関数テンプレートの多重定義
2.5 まとめ

第3章 クラステンプレート

3.1 Stackクラステンプレートの実装
 3.1.1 クラステンプレートの宣言
 3.1.2 メンバ関数の実装
3.2 Stackクラステンプレートの使用
3.3 クラステンプレートの特殊化
3.4 部分的な特殊化
3.5 デフォルトのテンプレート引数
3.6 まとめ

第4章 インタイプテンプレートパラメータ

4.1 クラステンプレートのノンタイプパラメータ
4.2 関数テンプレートのノンタイプパラメータ
4.3 ノンタイプテンプレートパラメータの制限
4.4 まとめ

第5章 技巧の基本

5.1 typenameキーワード
5.2 this->を使う
5.3 メンバテンプレート
5.4 テンプレートテンプレートパラメータ
5.5 ゼロで初期化
5.6 関数テンプレートの引数に文字列リテラルを使う
5.7 まとめ

第6章 テンプレートの実践的な使い方

6.1 包含モデル
 6.1.1 リンカエラー
 6.1.2 ヘッダファイル中のテンプレート
6.2 明示的なインスタンス化
 6.2.1 明示的なインスタンス化の例
 6.2.2 包含モデルと明示的なインスタンス化の組み合わせ
6.3 分割モデル
 6.3.1 exportキーワード
 6.3.2 分割モデルの制限
 6.3.3 分割モデルの準備
6.4 テンプレートとinline
6.5 プリコンパイル済みヘッダ
6.6 テンプレートのディバック
 6.6.1 エラー長編小説の解読
 6.6.2 浅いインスタンス化
 6.6.3 長いシンボル
 6.6.4 トレーサ
 6.6.5 オラクル
 6.6.6 アーキタイプ(Archetypes:原型)
6.7 補遺
6.8 まとめ

第7章 基本的なテンプレートの用語

7.1 「クラステンプレート」か「テンプレートクラス」か?
7.2 インスタンス化と特殊化
7.3 宣言と定義
7.4 ODR(One-Definition Rule)
7.5 テンプレート引数とテンプレートパラメータ

● 第2部 テンプレートの深層

第8章 基本法則の深層

8.1 宣言パラメータ化
 8.1.1 仮想メンバ関数
 8.1.2 テンプレートのリンゲージ
 8.1.3 プライマリテンプレート
8.2 テンプレートパラメータ
 8.2.1 型パラメータ
 8.2.2 ノンタイプパラメータ
 8.2.3 テンプレートテンプレートパラメータ
 8.2.4 デフォルトのテンプレート引数
8.3 テンプレート引数
 8.3.1 関数テンプレートの引数
 8.3.2 型引数(Type Arguments)
 8.3.3 ノンタイプ引数
 8.3.4 テンプレートテンプレート引数
 8.3.5 等価性(Equivalence)
8.4 フレンド
 8.4.1 フレンド関数
 8.4.2 フレンドテンプレート
8.5 補遺

第9章 テンプレートに含まれる名前

9.1 名前の分類
9.2 名前の検索
 9.2.1 引数依存検索(ADL:Argument-Dependent Lookup)
 9.2.2 フレンド名のインジェクション
 9.2.3 インジェクションされたクラス名
9.3 テンプレートのディバック構文解析
 9.3.1 非テンプレートの文脈依存性
 9.3.2 型の依存名
 9.3.3 テンプレートの依存名(context Sensitivity)
 9.3.4 using宣言中の依存名
 9.3.5 ADLと明示的なテンプレート引数
9.4 派生とクラステンプレート
 9.4.1 非依存のベースクラス
 9.4.2 依存のベースクラス
9.5 補遺

第10章 インスタンス化

10.1 オンデマンドのインスタンス化(On-Demand Instantiation)
10.2 インスタンス化の遅延(lazy Instantiation)
10.3 C++のインスタンスモデル
 10.3.1 2段階検索(Two-Phase Lookup)
 10.3.2 インスタンス化する場所(POI:Point of Instantiation)
 10.3.3 包含モデルと分割モデル
 10.3.4 翻訳単位をまたいだ検索
 10.3.5 例
10.4 実装スキーム
 10.4.1 貧欲なインスタンス化(Greedy Instantiation)
 10.4.2 問い合わせ型インスタンス化(Queried Instantiation)
 10.4.3 反復的なインスタンス化(Iterated Instantiation)
10.5 明示的なインスタンス化
10.6 補遺

第11章 テンプレート引数の推論

11.1 推論プロセス
11.2 文脈の推論
11.3 推論の特別な状況(Special Deduction Situations)
11.4 許容できる引数変換
11.5 クラステンプレートパラメータ
11.6 デフォルトの呼び出し引数
11.7 Barton-Nackmanのトリック
11.8 補遺

第12章 特殊化と多重定義

12.1 「ジェネリックなコード」では役に立たないとき
 12.1.1 透過的なカスタマイズ
 12.1.2 意味の透過性
12.2 関数テンプレートの多重定義
 12.2.1 シグネチャ
 12.2.2 多重定義された関数テンプレートの、完全な順序付け
 12.2.3 正式な順序付けルール
 12.2.4 テンプレートと非テンプレート
12.3 明示的な特殊化
 12.3.1 クラステンプレートの完全な特殊化
 12.3.2 関数テンプレートの完全な特殊化
 12.3.3 メンバの完全な特殊化
12.4 クラステンプレートの部分的な特殊化
12.5 補遺

第13章 将来の動向

13.1 角括弧のハック
13.2 typenameの緩いルール
13.3 デフォルト関数のテンプレート引数
13.4 文字列リテラルと浮動小数点のテンプレート引数
13.5 テンプレートテンプレートパラメータの緩いマッチング
13.6 typedefテンプレート
13.7 関数テンプレートの部分的な特殊化
13.8 typeof演算子
13.9 名前付きテンプレート引数
13.10 静的なプロパティ(static properties)
13.11 インスタンス化時のコンパイルエラー
13.12 クラステンプレートの多重定義
13.13 リストパラメータ
13.14 レイアウトのコントロール
13.15 初期化子の推論
13.16 関数式
13.17 補遺

● 第3部 テンプレートと設計

第14章 テンプレートが多態する能力

14.1 動的な多態
14.2 静的な多態
14.3 「動的な多態」対「静的な多態」
14.4 デザインパターンの新しい形
14.5 ジェネリックプログラミング
14.6 補遺

第15章 トレイツとポリシークラス

15.1 例:列を積算する
 15.1.1 固定されたトレイツ
 15.1.2 値トレイツ
 15.1.3 パラメータ化したトレイツ
 15.1.4 ポリシーとポリシークラス
 15.1.5 トレイツとポリシーの違いは何か?
 15.1.6 「メンバテンプレート」対「テンプレートテンプレートパラメータ」
 15.1.7 複数ポリシーとトレイツの組み合わせ
 15.1.8 一般的な反復子(General Iterator)による積算
15.2 型関数(Type Function)
 15.2.1 要素型の判別
 15.2.2 クラス型かどうかを判断する
 15.2.3 参照と修飾子
 15.2.4 上位変換トレイツ(Promotion Traits)
15.3 ポリシートレイツ
 15.3.1 リードオンリーのパラメータ型
 15.3.2 コピー、変換、移動
15.4 補遺

第16章 テンプレートと継承

16.1 名前付きのテンプレート引数
16.2 空のベースクラスの最適化(Empty Base Class Optimization:EBCO)
 16.2.1 レイアウトの原則
 16.2.2 メンバをベースクラスにする
16.3 奇妙な再帰テンプレートパターン(CRTP:Curiously Recurring Template Pattern)
16.4 パラメータ化した仮想性
16.5 補遺

第17章 メタプログラム

17.1 初めてのメタプログラムの例
17.2 列挙値と静的な定数の比較
17.3 2番目の例:平方根の計算
17.4 推論変数の使用
17.5 計算方法の完全性
17.6 再帰的なインスタンス化と、再帰的なテンプレート引数
17.7 メタプログラムを使ったループのアンロール
17.8 補遺

第18章 式テンプレート

18.1 一時変数と、ループの分断
18.2 テンプレート引数の中に式を符号化する
 18.2.1 式テンプレートの被演算子
 18.2.2 Array型
 18.2.3 演算子
 18.2.4 復習
 18.2.5 式テンプレートの代入
18.4 式テンプレートのパフォーマンスと制限
18.5 補遺

● 第4部 高度な応用

第19章 型の分類

19.1 基本型を判断する
19.2 複合型を判断する
19.3 関数型を判断する
19.4 多重定義の解決を使った列挙型の分類
19.5 クラス型を判断する
19.6 全部まとめる
19.7 補遺

第20章 スマートポインタ

20.1 ホルダと転送カプセル
 20.1.1 例外から保護する
 20.1.2 ホルダ
 20.1.3 ホルダをメンバとして使う
 20.1.4 リソース確保で初期化
 20.1.5 ホルダの制限
 20.1.6 ホルダをコピーする
 20.1.7 関数の呼び出しをまたいだホルダのコピー
 20.1.8 転送カプセル
20.2 参照数を数える
 20.2.1 カウンタはどこに?
 20.2.2 カウンタへの同期アクセス
 20.2.3 破棄と解放
 20.2.4 CountingPrrテンプレート
 20.2.5 単純な非浸潤カウンタ
 20.2.6 シンプルな浸潤的カウンタテンプレート
 20.2.7 const性
 20.2.8 暗黙の変換
 20.2.9 比較
20.3 補遺

第21章 ダブル

21.1 ふた組(Duo)
21.2 再帰的なduo
 21.2.1 フィールドの数
 21.2.2 フィールドの型
 21.2.3 フィールドの値
21.3 ダブルの構築
21.4 補遺

第22章 関数オブジェクトとコールバック

22.1 直接呼出し、間接呼び出し、インライン呼び出し
22.2 関数へのポインタと参照
22.3 メンバ関数へのポインタ
22.4 クラス型のファンクタ
 22.4.1 クラス型ファンクタの最初の例
 22.4.2 クラス型ファンクタの型
22.5 ファンクタの指定
 22.5.1 テンプレート型引数でファンクタを指定
 22.5.2 関数呼び出し引数としたファンクタ
 22.5.3 関数呼び出しパラメータとテンプレート型パラメータの組み合わせ
 22.5.4 ノンタイプテンプレート引数としたファンクタ
 22.5.5 関数ポインタのカプセル化
22.6 イントロスペクション
 22.6.1 ファンクタ型の分析
 22.6.2 パラメータの型にアクセスする
 22.6.3 関数ポインタをカプセル化する
22.7 関数オブジェクトのコンポジション(合成)
 22.7.1 シンプルなコンポジション
 22.7.2 型を混合したコンポジション
 22.7.3 パラメータ数を減らす
22.8 値のバインダ
 22.8.1 バインディングの選択
 22.8.2 バインドしたシグネチャ
 22.8.3 引数の選択
 22.8.4 ユーティリティ関数
22.9 ファンクタの操作:完全な実装例
22.10 補遺

付録 A One-Definitionルール

A.1 翻訳単位(Translation Units)
A.2 宣言と定義
A.3 One-Definitionルールの詳細
 A.3.1 プログラム1つあたりの制約
 A.3.2 翻訳単位1つあたりの制約
 A.3.3 交差した翻訳単位の同一性制約

付録 B 多重定義の解決

B.1 多重定義の解決はいつ始まるのか?
B.2 単純化した多重定義の解決
 B.2.1 メンバ関数に暗黙に渡される引数
 B.2.2 完全一致への洗練
 B.3 多重定義の詳細
 B.3.1 非テンプレート版を選択する
 B.3.2 変換シーケンス
 B.3.3 ポインタ変換
 B.3.4 関数と代理関数
 B.3.5 他の多重定義の文脈

用語集
参考文献
索引
訳者あとがき

各種問い合わせは以下のリンクからご連絡ください

関連商品

入門Haskellプログラミング

販売価格:4,104円(税込)

2019.07.31発売

絵で見てわかる量子コンピューターの仕組み

販売価格:2,786円(税込)

2019.07.10発売

作れる!学べる!Unreal Engine 4 ゲーム開発入門 第2版

販売価格:3,542円(税込)

2019.07.03発売

おすすめ特集

今月のクーポン

翔泳社の通販SEshopなら全品送料無料、ポイント還元、さらに毎月更新の割引クーポンでお得!

Python特集

【今からはじめるPython特集】おすすめ本を入門~上級までレベル別にご紹介!

情報処理教科書シリーズ

情報処理技術者試験におすすめの参考書「EXAMPRESS 情報処理教科書シリーズ」で最短合格!

アルゴリズムと数学の本

プログラマ脳を鍛える!エンジニアが読むべきアルゴリズムと数学の本特集。

【特集】翔泳社のロングセラービジネス書

初版刊行以来人気を集め続けている翔泳社のロングセラービジネス書をご紹介。

SQL/データベース関連本特集

初心者向けの入門書から、達人レベルの専門書まで!SQL/データベース関連おすすめ本特集。

特集をもっと見る