У меня есть файл: Base.h
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
/*etc...*/
и еще один файл: BaseFactory.h
#include "Base.h"
class BaseFactory
{
public:
BaseFactory(const string &sClassName){msClassName = sClassName;};
Base * Create()
{
if(msClassName == "DerivedA")
{
return new DerivedA();
}
else if(msClassName == "DerivedB")
{
return new DerivedB();
}
else if(/*etc...*/)
{
/*etc...*/
}
};
private:
string msClassName;
};
/*etc.*/
Есть ли способ каким-то образом преобразовать эту строку в фактический тип (класс), чтобы BaseFactory не должен был знать все возможные классы Derived и иметь if() для каждого из них? Могу ли я создать класс из этой строки?
Я думаю, что это можно сделать на С# через Reflection. Есть что-то подобное в С++?