Returning Derived templated class as Base class pointer

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

template<typename T>
class Derived : public Base {
public:
    Derived() {}
};

That code generates a compile error (VS Studio 2017):

syntax error: unexpected token 'identifier', expected 'type specifier'

Is this invalid C++? Is this pattern not possible?

Paul Evans

Declare Base as:

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

Then declare Derived:

template<typename T>
class Derived : public Base {
public:
    Derived() {}
};

Then define Base::construct:

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

The compiler needs a full definition of Derived before it can deal with the new in Base::construct.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Templating a Derived class of a Base class that is already templated

Assignment operator and copy constructor for class containing base class pointer to derived templated class

Diamond inheritance with templated base class: Base<Derived>

enable templated base class only for derived classes

Returning derived class as base generic class

Base class pointer assigned to derived class

Assigning address of derived class to base class pointer

Store Pointer to Derived Class Function in Base Class

Clone derived class from base class pointer

Casting base class pointer to derived class (reference)

Templated class members in the base class, don't exist in the derived classes

Base class pure virtual functions with templated derived class

derived class as a parameter of templated function which is specialized for its base class

Calling a templated function instanciated with base class on a derived class instance

base class ambiguous when converting derived class pointer to base class

Can you assign a pointer of a privately derived class to a pointer of the base class?

How to pass pointer of derived class to reference to pointer of base class?

C++: Assigning derived class pointer to base class pointer

Bring templated base class conversion operator into derived scope

How dose base pointer address in derived class?

Return derived object pointer in base class object

Error Assigning a Derived Class to the output of a function returning a base class

Returning a reference to the derived class from a base class method

returning derived class from overrided method, declared as returning base copy

Accessing derived class member from base class pointer

Access member of derived class from pointer of base class

Calling derived class through base class function pointer

How to prevent a pointer of base class to point to derived class?

Problem with For Loop and Base Class Pointer which points to a derived class