c++ - 与操作未知类型相关的设计问题

标签 c++ design-patterns

我遇到了一个设计问题,希望大家能帮忙解决。我有几个不同的类,它们有不同的参数(每种情况下超过 20 个,它们大多不同,尽管有些完全相同,在这种情况下它们从基类继承)。我想通过一个名为 ObjectProperties 的类的用户来控制这些参数。每个类都将创建 ObjectProperties 并在类初始化时用自己的参数列表填充它。这是通过如下设置的 map 完成的:

std::map<std::string, [data_type]> // where [data_type] can be an int, float, bool, string etc.

“字符串”是参数的名称,数据类型是与其关联的类型。这样做是为了以后轻松编写脚本(而不是拥有 20 多个 getter/setter)。我已经制作了 ObjectProperties 类,但它不太理想。我有一个结构,其中包含所有可能的数据类型,称为 DataTypeStruct,在 ObjectProperties 类中有一个映射变量,称为 pDataTypeMap;

typedef struct
{
   int* IntValue;
   float* FloatValue;
   bool* BoolValue;
   std::string* StringValue;
}DataTypeStruct;

std::map<std::string, DataTypeStruct> pDataTypeMap;

当一个类想要添加一个参数进行操作时,它会调用以下函数之一,然后该函数会适本地创建一个新结构并将其与要放入映射中的名称配对。该函数根据是否能够插入它返回 true 或 false(如果为 false,则该名称已经存在)

bool AddParam(std::string aName, int* aParam);
bool AddParam(std::string aName, float* aParam);
bool AddParam(std::string aName, bool* aParam);
bool AddParam(std::string aName, std::string* aString);

aParam 是/是指针的原因是因为要求参数必须通过引用传递,以便以后可以对其进行操作。

要更改参数的值,我有类似的功能。如您所见,这不太理想,因为我在结构上浪费了一些空间(其中每个新结构只存储一个 int 或 bool 或一个字符串或一个 float ),并且调用重载函数是不安全的(我可以' 使函数具有唯一的名称,但这又不太理想。

我希望我已经解释了我遇到的设计问题(解释起来有点困难)并且真的很想听听有关如何解决这个问题的建议。

最佳答案

我建议先看看 boost::any , boost:variant , boost::tupleboost::fusion::vector作为您 [data_type] 的“交通工具”。

关于c++ - 与操作未知类型相关的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3240005/

相关文章:

c++ - 如何编写垂直右侧的 IE 资源管理器栏

c++ - 在不调用 uac 的情况下启动服务

c++ - C++ 中可变数量的变量

用于在整个应用程序中共享配置的 Python 模式

c# - 在循环中调用具有相同输出和不同输入的多个方法

c++ - 自定义 unordered_map 的哈希函数

c++ - §1.3.7 (N4140) 中是否缺少 `polymorphic` 一词?

oop - 似乎无法理解SOLID原理和设计模式

c++ - 错误处理范式 : Mixing Exceptions and Error Codes

java - java中可以使用list来实现复合模式吗?