Вы можете использовать структуру данных карты, при этом ключ является именем класса, а значение является фабричным классом для создания объекта или указателем на функцию, которая при запуске вернет объект. Однако вам может потребоваться отбросить построенный объект до нужного вам типа.
Пример (Извинения для моей ржавой C++ кода):
Во-первых, у нас есть интерфейс для фабрики класса
class IObjectFactory
{
public:
virtual ~IObjectFactory() {}
virtual void* Create() = 0;
};
Затем конкретную реализацию. Я просто сделаю встроенный.
class ConcreteObjectFactory : public IObjectFactory
{
public:
void* Create() { return new ConcreteObject(); }
};
Теперь о карте.
using namespace std;
map<string, shared_ptr<IObjectFactory> > classMap;
// register the type
classMap["concreteObject"].reset(new ConcreteObjectFactory());
// using it, albeit you take all kinds of risks if the string is not found
// or points to the wrong type.
ConcreteObject* o =
static_cast<ConcreteObject *>(classMap["concreteObject"]->Create());
Существует много способов улучшить этот ответ. Для тех, кого это интересует, я предлагаю проверить главу о RTTI в «Программе для программистов на C++»
Невозможно в C++ - нет никакого отражения в отличие от java – Constantin
Каким будет случай использования? –
Возможно, вы пытаетесь сериализовать объект в строку. – Extrakun