假设我有一个有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
...
};
Run Code Online (Sandbox Code Playgroud)
在运行时,我想读取一个文件,其中包含要创建和提供的子项.假设我已经读过文件,字符串"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);
}
Run Code Online (Sandbox Code Playgroud)
我如何创建函数convert_string_to_instance(),这样如果它接受字符串"Child1"它返回一个"new Child1",如果字符串参数是"Child4"它返回一个"new Child4",等等
<class C *> convert_string_to_instance(string inName) {
// magic happens
return new C; // C = …
Run Code Online (Sandbox Code Playgroud)