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

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

我已经到了:

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

最佳答案

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

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

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

关于c++ - 模板类中的静态函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10587482/

10-11 18:32