タグ

ブックマーク / aki-yam.hatenablog.com (2)

  • テンプレートクラスの「特殊化」と「明示的インスタンス生成」を同時に使う場合は注意が必要だ - akihiko’s tech note

    テンプレート関数の明示的インスタンス生成で解説したように,テンプレートクラスとかテンプレート関数を明示的にインスタンス化しておくことで, ヘッダファイルの肥大化(コンパイル速度の低下) 望ましくない実装の公開 といった問題を避けられる.一方,テンプレートクラスやテンプレート関数で,ある型についてのみ特殊な実装を行う,「テンプレートの特殊化」という技術がある(過去の記事で何度か使っている).記事では,インスタンス化と特殊化を同時に使うと,思わぬ落し穴にはまることを,サンプルを交えながら解説する. 以下の内容は標準規格などで確認できていないので,g++(4.3.3)に限った話かもしれないことを注意しておく. まず,以下の3つのファイルからなるユニット unit1 を用意する: ヘッダ: /*! \file unit1.h \date Feb.19, 2009 */ #ifndef unit1

    テンプレートクラスの「特殊化」と「明示的インスタンス生成」を同時に使う場合は注意が必要だ - akihiko’s tech note
  • STL コンテナの前方宣言:軽いヘッダファイルを作るには - akihiko’s tech note

    STL (standard template library) コンテナを include すると,それなりにコストが掛かる(参考).このコストは,場合によっては「前方宣言 (forward declaration)」によって大幅に軽減できる.STL コンテナの場合,前方宣言が少々ややこしいので,まとめておく. 前方宣言 (forward declaration) 前方宣言とは,関数やクラスの定義を与えずに,宣言だけ書いておくことだ.関数やクラスを参照するが,その定義までは知る必要ないときは,前方宣言を書いておくだけで済む.例えば,ヘッダファイルに void func1(const double &x); とだけ書いておいて,定義は別のファイルに書いても,このヘッダファイルを include するだけで func1 を使うことができる. 次の例も可能だ: class TTest; void

    STL コンテナの前方宣言:軽いヘッダファイルを作るには - akihiko’s tech note
  • 1