【发布时间】:2022-12-21 22:48:29
【问题描述】:
我正在尝试实现一个系统,其中我有一个实现 Serializable 接口的模板类。
现在,接口包含序列化/反序列化方法,而模板设置类有 get/set,私有成员 settingName、settingValue 和模板函数 T adaptType() 使用 >> 运算符使字符串适应正确的类型(https://gist.github.com/mark-d-holmberg/862733) .该文件还包含一个自定义结构,其中重载了 << 和 >> 运算符以使一切正常。
在结构的情况下,设置以 settingName:settingValue 或 settingName:val1;val2;val3 的形式序列化。
这个设计有两个问题:
- 我想将所有这些设置对象保存在一个 map<string, ISerializable*(?)> 中以访问它们,但是我无法在这些对象上调用其他函数 get/set,因为接口没有定义方法(它们必须在设置类中,因为它们的类型取决于模板类型),如果我将映射中的第二种类型切换到模板类,我必须定义一个具体类型
- 反序列化时,无法知道它是哪种类型,并且 ISerializable 无法实例化,因为它是一个抽象类,我再次需要知道我正在反序列化哪种类型,并用适当的类型实例化 Setting 类
有没有更好的方法来设计这个或我缺少的东西,请注意我不是很精通 c++
问题的背景: 我在一个嵌入式设备上工作,需要将设置加载/保存到闪存,但设备上还有另一个框架在运行,它将这些设置保存在 RAM 中,并在要编辑的网络服务器上提供它们,我无法更改这部分。我的目标是将这些设置手动保存到我的自定义类中,该类管理设置并保存/加载到闪存,以便它在重新启动之间保持不变并与 Web 框架同步。
欢迎任何帮助或建议
【问题讨论】:
-
如果您可以分享一个玩具示例界面以及您将在何处脱困......但是根据您的描述我怀疑对于问题 1 您可能会发现“双重派遣”方法会起作用。对于问题 2,您可能会尝试使用工厂模式,因此当您序列化时,您存储了一些类型的表示,然后在反序列化时,您将该字符串/枚举/等值传递给工厂,它会为您创建具体类型
标签: c++ serialization deserialization