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 ++?

questionAnswers(9)

yourAnswerToTheQuestion