テンプレートに一種のファクトリ クラスを作成しようとしています。純粋な仮想関数のようなことをしたかったのですが、関数を使用して型を作成しているため、静的である必要があります。
私がしたいことは、クラスを宣言するときに、テンプレートが静的関数を呼び出すことです。静的関数は、実際にはテンプレート化されたクラスで宣言されています。
私はこれまでのところ持っています:
class Base
{
};
template<typename T>
class Type : public Base
{
public:
static void Create()
{
mBase = CreateBase();
}
private:
static Base* CreateBase();
static Base* mBase;
};
class MyType : public Type<MyType>
{
private:
static Base* CreateBase()
{
return new MyType;
}
};
template<typename T>
Base* Type<T>::mBase = NULL;
void test()
{
MyType::Create();
}
リンク時エラーが発生します。
undefined reference to `Type<MyType>::CreateBase()