CRTPを用いて静的な多態性を実現する

C++テンプレートテクニック 8-1


自分自身をテンプレート指定したものを継承するというぱっと聞くと凄く良く分からないお話。

見たほうが早い。

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

template<class T>
class CBase {
public:
    void foo () {
        static_cast<T&>(*this).bar();
    }
};

class CClass : public CBase<CClass> {
public:
    void bar() {
        cout << "bar" << endl;
    }
};

int main () {
    CClass obj;
    obj.foo();
    return 0;
}
$ main
bar

こんな感じ。

これってシンプルだけど非常に便利な気がするのですがどうなんでしょう。