在数据库中保留类信息

时间:2012-08-10 09:14:39

标签: c++ wt

我有几个类(相同的基类),只允许一些用户实例化一些。我需要为数据库中的用户保留允许的类。

我当然需要一些建议。因为我认为,我不需要在数据库中将类名列表作为字符串,并在字符串比较的条件下实例化它们。这对我来说感觉不对。

典型情况是 1.调用GetAllowedClassesToInstantiate(用户)[来自数据库]
2.实例化那些类

你有什么建议吗?

此致 布拉克

1 个答案:

答案 0 :(得分:0)

制作如下数据结构:

class BaseClass;

std::map<std::string, std::function<BaseClass*()> Factories;

并按以下方式初始化:

class One : BaseClass { ... }

void init() {
    Factories["One"] = [](){ return new One(); }
}

基本上它将用作查找ClassName -> Constructor

在数据库中保留允许的类名。检索后,将其呈现给用户,当他选择一个选项时,在Factories中查找正确的构造函数包装函数,并使用它来实例化所选类。

确保使用Factories中的输入键使数据库条目保持最新。

(我在代码示例中使用了一些C ++ 11。您可以在C ++ 03中使用更多代码执行相同的操作,不使用lambda表达式和std::function,但是想法保持不变。)