Это называется отражением и не является частью языка C ++.Это можно реализовать с помощью чего-то, обычно называемого фабричным шаблоном.Это работает так, что для каждого типа, который вы хотите иметь возможность создать, вы создаете отображение между функцией, которая может создать объект этого типа, и его именем.
Это отображение может быть чем-то таким простым, какstd::map
где ключ - это имя класса, а значение - указатель на функцию, возвращающую новый экземпляр класса.