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