長いので続く。
#include <iostream> template<class T> struct base { void execute() { static_cast<T&>(*this).execute(); } }; struct hoge : public base<hoge> { void execute() { std::cout << "hoge" << std::endl; } }; struct foo : public base<foo> { void execute() { std::cout << "foo" << std::endl; } }; // ↑のような Template Method の実装があったとして... void main() { hoge h; foo f; nantoka(h); nantoka(f); } // ↑みたいな使い方をするとき... // どうする? void nantoka(???) { }
まあ、関数呼び出しの場合は、以下のようにすれば動くのです。
// こうすれば動く template<class T> void nantoka(base<T>& obj) { obj.execute(); }
しかし。
>
void main()
{
hoge h;
base& b = h; // これができない
}
これをうまく解決できないと、先に進むことができないため、試行錯誤しています。もう少し考えてみよう。