¿Hay alguna forma de instanciar objetos de una cadena que contenga su nombre de clase?
Tengo un archivo: Base.h
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
/*etc...*/
y otro archivo: 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.*/
¿Hay alguna manera de convertir de alguna manera esta cadena en un tipo real (clase), para que BaseFactory no tenga que conocer todas las clases derivadas posibles y tener if () para cada una de ellas? ¿Puedo producir una clase a partir de esta cadena?
Creo que esto se puede hacer en C # a través de Reflection. ¿Hay algo similar en C ++?