微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据C中的字符串创建对象

我有一个超类的几个子类,并希望根据给定的字符串创建特定类的实例

Superclass instantiateSubclass(string s);

我没有使用巨大的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},/* ... */
                                               };

要做

Base * create_from_string(std::string const & s)
{
    auto it = registry.find(s);
    return it == registry.end() ? nullptr : (it->second)();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐