@Emile: Обычно да, но можно ожидать, что это будет очень медленно.

тим, у меня есть базовый класс на 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», она возвращала «new Child1», если строковым аргументом является «Child4», она возвращает «new Child4» и т. Д.

<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>
  }

Ответы на вопрос(7)

Ваш ответ на вопрос