Search code examples
c++arraystypesabstract

C++ create an array with type of template base class without specifying the template argument


For example I have some base type Any

template<typename T>
class Any
{
public:
    T data;
    Any(T data) { this->data = data; }
    // some other function signatures using data
};

class Number : public Any<int>
{
    // functions defining all functions like substracting etc.
};

And more classes deriving Any

Now in main function I want to create an array of Any

int main()
{
    Any types[2] { Number(1), Number(3) }; // doesnt work
}

Is there another way of doing this?


Solution

  • Let's say you have:

    class A : public Any<int> { };
    
    class B : public Any<std::string> { };
    
    class C : public Any<double> { };
    

    Objects of type A, B, and C are not subclasses of Any because Any is a template. Rather they are subclasses of Any<int>, Any<std::string> and Any<double>, respectively and as such do not share a common parent class.

    You may wish to read up on std::variant.