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