意図[編集] 派生クラス自身をテンプレート引数として、基本クラスを特殊化する。 別名[編集] CRTP 上からの混入(Mixin-from-above) 動機[編集] 型には依存しないが、型別にカスタマイズ可能な機能を基本クラスから抽出し、それらインタフェース、属性、動作を派生クラス用にカスタマイズしてから、派生クラスに混入(mix-in)させる。 解法とサンプルコード[編集] 典型的には、基本クラステンプレートは、メンバ関数の本体(定義)はその宣言から非常に後になるまでインスタンス化されないという事実を活用する。そして、そのメンバ関数中で派生クラスのメンバ関数を、static_cast経由で利用する。例えば template <class Derived> struct base { void interface() { // ... static_cast<Derived*>(this