ATLライブラリ等で使用されている、自ポインタを基底クラスに渡すC++のtemplateの手法を説明します。 ※)動作確認はVC8(VisualStudio2005)で行いました。 クラスを継承して振る舞いを変えたい場合は、仮想クラスにして変更したい関数を継承先でOverWriteするのが普通ですが、CRTPを使用すれば仮想クラスにせずとも継承先で処理の変更をすることが可能です。 ではどう言う時にそのような事を発生させたいかと言うと、下記の2点ではないかと思います。 ・動的に継承先クラスを切り替えるのではなく、コンパイル時に型が確定している時。 ・インライン展開を行いたい時。 普通の場合ですと可読性を優先して、上記の場合でも仮想クラスとすべきなのでしょうが、色々制約が出てきた場合に今回の仕組みを知っていると楽になる場合が多々あると思います。 基底クラス(template) /** * 共通