継承を利用したポリシー
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()」へ修正。