継承を利用したポリシー

C++テンプレートテクニック 6-4


http://d.hatena.ne.jp/pknight/20100323/1269358966

続き。

お次は継承を利用したポリシーです。

#include <iostream>
using std::cout; using std::endl;

template<class Policy>
class CClass : public Policy {
public:
    void func () {
        this->foo();
    }
};

class CClassA {
public:
    void foo () { cout << "CClassA:" << endl; }
};

class CClassB {
public:
    void foo () { cout << "CClassB:" << endl; }
};

int main () {
    CClass<CClassA> a;
    CClass<CClassB> b;
    a.func();
    b.func();
    return 0;
}
$ main
CClassA
CClassB

これは凄い便利そうですね。基底クラスをテンプレート指定するパラメータ化継承を利用しています。

あの時はどういうケースか思い浮かばなかったのですが、こういう使い方ができるわけなんですね、納得。

追記(2010-03-25)

コメントにて指摘を頂いたので「foo()」→「this->foo()」へ修正。