模板类中的静态函数

时间:2012-05-14 16:37:14

标签: c++ function templates static

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

我想要发生的是当我声明一个类时,模板调用静态函数。静态函数实际上是在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()

2 个答案:

答案 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();
}