返回派生的模板化类作为基类指针

Nic*_*tum 0 c++

class Base {
public:
    template<typename T>
    static Base* construct() {
        return new Derived<T>();
    }
};

template<typename T>
class Derived : public Base {
public:
    Derived() {}
};
Run Code Online (Sandbox Code Playgroud)

该代码生成编译错误(VS Studio 2017):

syntax error: unexpected token 'identifier', expected 'type specifier'
Run Code Online (Sandbox Code Playgroud)

这是无效的C ++吗?这种模式不可能吗?

Pau*_*ans 5

声明Base为:

class Base {
public:
    template<typename T>
    static Base* construct();
}
Run Code Online (Sandbox Code Playgroud)

然后声明Derived

template<typename T>
class Derived : public Base {
public:
    Derived() {}
};
Run Code Online (Sandbox Code Playgroud)

然后定义Base::construct

static Base* Base::construct() {
    return new Derived<T>();
}
Run Code Online (Sandbox Code Playgroud)

编译器需要完整的定义Derived才能处理newin Base::construct