我有几个类(相同的基类),只有一些用户允许实例化一些。我需要为数据库中的用户保留允许的类。
我肯定需要一些建议。因为我认为,我不需要在数据库中将类名列表作为字符串并在字符串比较的条件下实例化它们。我只是觉得不对劲。
典型场景是
1. 调用 GetAllowedClassesToInstantiate(user) [From Database]
2. 实例化这些类
你有什么建议吗?
问候, 布拉克
制作这样的数据结构:
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
,但想法保持不变。)