Задание аргументов шаблона из переменных в C ++ - PullRequest
3 голосов
/ 21 декабря 2011

Я хочу создать экземпляр класса шаблона с типами данных, которые доступны во время выполнения в переменных. Например, рассмотрим этот класс:

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

Теперь я хочу использовать это так:

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

Есть ли способ сделать это?

Я сталкиваюсь с этой проблемой в контексте сериализации производных классов с базовыми указателями. Я использую RTTI для определения реального типа производного класса, но информация о реальном типе хранится в строке. Моя проблема заключается в том, чтобы иметь возможность динамического вещания для типа (доступного в виде строки во время выполнения) из базового указателя. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Отсутствие механизма отражения в C ++ делает практически невозможным «динамическое создание» на основе данных с прямой языковой поддержкой.

Единственный способ - использовать «переключатель» или любой эквивалентный декларативный механизмкак фабричный класс, владеющий картой диспетчеризации, которая связывает строки, объявляющие тип, с вызовами функций создания.

1 голос
/ 21 декабря 2011

Вы не можете. Типы данных должны быть известны во время компиляции. Возможно, использование Boost или союзов может решить проблему не очень красиво.

Удачи!

...