我有一个超类的几个子类,并希望根据给定的字符串创建特定类的实例
Superclass instantiateSubclass(string s);
Run Code Online (Sandbox Code Playgroud)
我没有使用巨大的if-cascade,而是希望使用配置文件来完成此任务.
这允许我在不重新编译的情况下更改字符串s的可能值,我希望它会导致更简洁的代码.
配置文件应该包含像"subclass1","subclass2"这样的字符串,但是如何根据字符串创建类呢?
基本上我需要从字符串到类的映射,这在C++中是否可行?我认为其他语言提供了反映此问题的可能性.
注册你的课程:
struct Base;
struct Derived1 : Base
{
static Base * create() { return new Derived1; }
};
std::map<std::string, Base * (*)()> registry = { {"derived1", &Derived1::create},
/* ... */
};
Run Code Online (Sandbox Code Playgroud)
要做:
Base * create_from_string(std::string const & s)
{
auto it = registry.find(s);
return it == registry.end() ? nullptr : (it->second)();
}
Run Code Online (Sandbox Code Playgroud)