5

我正在尝试在模板中创建一种工厂类。我想做一个纯虚函数之类的东西,但它需要是静态的,因为我正在使用该函数来创建类型。

我想要发生的是当我声明一个类时,模板调用静态函数。静态函数实际上是在模板化类中声明的。

我已经做到了:

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()
4

2 回答 2

3

CreateBase函数在基本类型中定义,因此只需调用它:

template<typename T>
class Type : public Base
{
public:
    static void Create()
    {
        mBase = Base::CreateBase();
    }
//...

无需CreateBase在模板中声明另一个。

于 2012-05-14T16:41:12.087 回答
2

找到了。

问题是我没有调用派生类的函数。

这是修复:

static void Create()
{
    mBase = T::CreateBase();
}
于 2012-05-15T08:53:52.070 回答