Somesh
Somesh

Reputation: 105

Specifying template arguments from variables in C++

I want to instantiate a template class with data types that are available at runtime in variables. For example, consider this class:

template <typename T, unsigned int U>
class Allocator
{
public:
    T * pointer;
    Allocator() { pointer = new T[U]; }
    ~Allocator() { delete [] pointer; }
};

Now I want to use it like this:

int main()
{
    string temp = "int";
    unsigned int count = 64;
    Allocator<temp, count> a;
    return 0;
}

Is there any way of doing this?

I am facing this problem in the context of serializing derived classes with base pointers. I use RTTI to identify the real type of derived class, but the information of the real type is stored in a string. My problem is to be able to dynamic_cast to the type (available as a string at runtime) from the base pointer. Please help.

Upvotes: 3

Views: 131

Answers (2)

Emilio Garavaglia
Emilio Garavaglia

Reputation: 20730

The absence of a reflection mechanism in C++ makes practically impossible the "dynamic creation" based on data with a direct language support.

The only way is to use a "switch", or any equivalent declarative mechanism, like a factory class owning a dispatch map that associate the strings declaring the type to creation function calls.

Upvotes: 1

Drewen
Drewen

Reputation: 2936

You can't. Data types must be known at compile time. Maybe using Boost or unions may solve the problem in a non-pretty way.

Good luck!

Upvotes: 1

Related Questions