Динамическое создание экземпляра класса из строки, содержащей имя класса в C ++

Допустим, у меня есть базовый класс со 100 дочерними элементами:

class Base { 
  virtual void feed();
  ...   
};
class Child1 : public Base {
  void feed();  //specific procedure for feeding Child1
  ... 
};
...
class Child100 : public Base { 
  void feed();  //specific procedure for feeding Child100
  ...
};

Во время выполнения я хочу прочитать файл, в котором содержатся дочерние элементы, которые нужно создавать и кормить. Допустим, я прочитал файл, и вектор строк «names» содержит имена дочерних классов (например, Child1, Child4, Child99). Теперь я собираюсь выполнить итерацию по этим строкам, создать экземпляр конкретного дочернего элемента и накормить его специальной процедурой подачи:

vector<Base *> children;    
for (vector<string>::iterator it = names.begin(); it != names.end(); ++it) {
  Base * child = convert_string_to_instance(*it)       
  child->feed()
  children.push_back(child);
}

Как мне создать функцию convert_string_to_instance (), чтобы, если она принимает строку «Child1 «он возвращает« новый ребенок1 », если строковый аргумент -« ребенок4 », он возвращает« новый ребенок4 »и т. д.

<class C *> convert_string_to_instance(string inName) {
  // magic happens
  return new C;  // C = inName

  // <brute force?>
  // if (inName == "Child1")
  //   return new Child1;
  // if (inName == "Child2")
  //   return new Child2;    
  // if (inName == "Child3")
  //   return new Child3;    
  // </brute force>
  }
11
задан Scott 4 June 2011 в 02:23
поделиться