我正在尝试在模板中创建一种工厂类。我想做类似纯虚函数的事情,但它需要是静态的,因为我正在使用函数来创建类型。
我想要发生的是当我声明一个类时,模板调用静态函数。静态函数实际上是在templatised类中声明的。
我到目前为止:
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()
答案 0 :(得分:2)
CreateBase
函数在基类型中定义,因此只需调用它:
template<typename T>
class Type : public Base
{
public:
static void Create()
{
mBase = Base::CreateBase();
}
//...
无需在模板中声明另一个CreateBase
。
答案 1 :(得分:1)
找到它。
问题是我没有调用派生类的函数。
以下是修复:
static void Create()
{
mBase = T::CreateBase();
}