gpt4 book ai didi

c++ - 使用类定义数组创建 C++ 类

转载 作者:行者123 更新时间:2023-11-28 05:15:10 24 4
gpt4 key购买 nike

我正在编写一个从数据库中读取文档并将内容转换为 C++ 类实例化的程序。在每个文档中都有一个“类型”字段,我将其映射到特定的 C++ 类。基本上就是看文档,构造一个对应类的对象,填写类对象的字段。我可能有 10-15 个不同类型的类,因为每个文档中的数据类型可能不同,尽管有些类型是常见的。常见的数据类型反射(reflect)在基类/派生类定义中。现在我有一个 switch 语句,其中包含对应于不同类型对象的 case 语句,在每个 case 语句中,我创建了正确类型的对象,然后填充它。虽然它有点困惑。

我想知道是否有办法将各种类定义放在一个数组中,这样我就可以基本上摆脱 switch 语句。我理想的代码如下所示:

auto * obj = new arrayOfClassDefinitions[typeofClassIndex]

其中 arrayOfClassDefinitions 包含一组类的名称。然后 obj 指针将指向所需类的新实例。

我记得我可以在 Python 中做这样的事情,但我不确定 C++。

有什么想法吗??

最佳答案

如果您可以将所有类组织到一个分层树中,则可以使用 Abstract factory pattern得到类似的结果。这是例子:

#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;
}

关于c++ - 使用类定义数组创建 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42816876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com