テンプレートメタプログラミング
ポリモーフィズムを使えば、派生クラスのオブジェクトを元となるクラスのオブジェクトのように扱いつつ、メソッドは派生クラスのものを使うことができる。例えば、次のようなコードである:
virtual メソッドの呼び出しでは最も下位のクラスのメソッドが使われる。「動的ポリモーフィズム」では、virtualメソッドを持つクラスについて仮想関数テーブル (virtual look-up table) が生成され、実行時にそのテーブルを参照してどのメソッドを呼び出すかが決められる。従って、「動的ポリモーフィズム」では実行時のオーバヘッドが避けられない。
しかし、多くの場合ポリモーフィズムは動的である必要がなく、コンパイル時に決定可能である。そこで、Curiously Recurring Template パターン (CRTP) を使って「静的ポリモーフィズム」を実現できる。これはコード上はポリモーフィズムに似せた手法であってポリモーフィズムそのものではないが、コンパイル時に解決されるため、オーバヘッドを削減できる。以下に例を示す:
ここで、メンバ関数本体が宣言のずっと後にインスタンス化されるという事実を利用して、static_cast を使って派生クラスのメンバをベースクラスのメンバ関数内で使い、コンパイル時にポリモーフィズム的な機能を実現している。CRTPは実際にBoostのイテレータライブラリで広く使われている。
類似の使用法として "Barton-Nackman trick" がある。