Existe uma maneira de instanciar objetos de uma string contendo o nome da class
Tenho um arquivo: Base.h
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
/*etc...*/
e outro arquivo: 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.*/
Existe uma maneira de converter de alguma forma essa string em um tipo real (classe), para que BaseFactory não precise conhecer todas as classes derivadas possíveis e tenha if () para cada uma delas? Posso produzir uma classe dessa string?
Acho que isso pode ser feito em c # através do Reflection. Existe algo semelhante em C ++?