使用类定义数组创建C++类
Creating C++ classes using an array of class definitions
我正在编写一个程序,该程序从数据库中读取文档并将内容转换为C++类实例化。在每个文档中都有一个"类型"字段,我将其映射到特定的C++类。 基本上,我阅读文档,构造相应类的对象,并填写类对象的字段。我可能有 10-15 种不同类型的类,因为每个文档中的数据类型可能不同,尽管有些类型很常见。常见数据类型反映在基/派生类定义中。现在我有一个 switch 语句,其中包含对应于不同类型对象的 case 语句,在每个 case 语句中,我创建正确类型的对象,然后填写它。不过有点乱。
我想知道是否有办法将各种类定义放在数组中,以便我基本上可以摆脱 switch 语句。我的理想代码如下所示:
auto * obj = new arrayOfClassDefinitions[typeofClassIndex]
其中 arrayOfClassDefinition 包含一组类的名称。然后,obj 指针将指向所需类的新实例化。
我记得我可以在 Python 中做这样的事情,但我不确定C++。
任何想法??
如果可以将所有类组织到一个分层树中,则可以使用抽象工厂模式来获得类似的结果。这是一个例子:
#include <map>
#include <memory>
class IBaseClass {
public:
virtual ~IBaseClass(){}
};
class A : public IBaseClass {
public:
// ....
};
class B : public IBaseClass {
public:
// ....
};
class C : public IBaseClass {
public:
// ....
};
class IFactory {
public:
virtual ~IFactory(){}
virtual IBaseClass* create() = 0;
};
template <class T>
class SimpleFactory :
public IFactory {
public:
IBaseClass* create() override {
return new T();
}
};
template <typename T>
std::shared_ptr<IFactory> make_factory() {
return std::make_shared<SimpleFactory<T> >();
}
int main(int, char**)
{
std::map<int, std::shared_ptr<IFactory>> factories = {
{1, make_factory<A>()},
{2, make_factory<B>()},
{3, make_factory<C>()}
};
// ....
int type_index = 1;
auto obj = factories[type_index]->create();
// ...
// don't forget to delete
delete obj;
return 0;
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息