Динамическое выделение объекта на основе типа указателя C++

Предисловие:

Есть базовый виртуальный класс (Base), на основе которого строится еще пара "обычных" классов (Der1, Der2). Также есть еще один класс (Test), в котором нужно создать объект одного из "обычных" классов. Но тип создаваемого объекта заранее не известен.

Соответственно нужно динамически создать объект. Я создал массив структур, в котором определено соответствие между именем "обычного" класса и указателем на тип соответствующего "обычного" класса. Тогда через некий метод в классе Test на основе имени произойдет сопоставление на указатель и выделится память на основе типа указателя. Так было в моей голове :D По факту, у меня не получается таким образом выделить память в классе Test, пробовал по-разному, например:

Der1 * pDer1 = NULL;
Der2 * pDer2 = NULL;

this->pBase = (Base*) new auto (*pDer2);   

Вопрос:

Возможно ли в C++ (желательно c++11, но не принципиально) динамически выделить память для объекта на основе типа указателя на класс? Вопрос именно в синтаксисе и возможности. А еще возможно есть более простой способ реализации для моего случая.

Гугл выдает старые темы (до 2011), также видел решения на основе typeid, но считаю их ужасными, потому что typeid может только сравнивать типа, т.е. придется реализовывать через цепочку if-ов для нахождения искомого типа.

Новичок в с++, да, нужно читать книжки, но сейчас нет времени :)


Ответы (1 шт):

Автор решения: Mikhailo

Можно воспользоваться выводом типа decltype от *p - он даст тип-ссылку, которую можно "сгноить" до голого типа:

this->pBase = new decay_t<decltype(*pDer2)>;
→ Ссылка