タグ

2008年9月27日のブックマーク (2件)

  • http://ch.cri-mw.co.jp/hirase/758.html

    amachang
    amachang 2008/09/27
    CRTP(子クラスをテンプレート引数として取るデザインパターン)の利点。仮想関数の欠点は二つ「vtable(仮想関数テーブル)」「RTTI(Run-Time Type Information)」のためのメモリ。/仮想デストラクタが使えないメモリリーク
  • C++ Labyrinth

    テンプレートあれこれ (3) -- 明示的なインスタンス生成 クラステンプレートでは、メンバ関数は inline として (あるいは直接クラス内で) 定義するのが一般的である。 template<class T> class Foo { public: void hoge( const T* s ) { // s を使った処理 } }; だが、これでは実装の詳細をすべてクライアントに曝してしまっているわけで、 商用ライブラリなどでは不都合なこともある。実装を隠したいのであれば、 普通のクラスを定義するときと同様、宣言だけをヘッダーファイルに置き、 メンバ関数の実装を .cpp ファイルとして分離することができる。 [foo.h] template<class T> class Foo { public: void hoge( const T* s ); }; [foo.cpp] #incl

    amachang
    amachang 2008/09/27
    別の cpp ファイルの中にテンプレート関数がある場合、どの型や定数に関してそのテンプレートをインスタンス化するかを書かないといけない。ヘッダファイルに書くと使うとこだけインスタンス化されるから便利ー。