c++ - 1 :n relation in OOP regarding to deserialisation

标签 c++ oop

我像这样模拟了两个类:

ClassA -- n:1 --> ClassB

ClassB 对 ClassA 一无所知(单向关系)。现在我正在为 ClassA 编写一个文件加载器,它使用(并且不拥有)一个 ClassB 对象。

代码方面的 ClassA 持有指向 ClassB 的指针,这就是我的问题出现的地方:加载程序只负责加载 ClassA,无法访问包含所有 ClassB 对象的容器,因此不可能建立关系。

一个解决方案是向 ClassA 插入一个字符串成员,其中包含 ClassB 对象的 ID,以便稍后可以建立关系。但是,问题是是否有任何其他方法可以解决此问题。加载后我不再需要该 ID,因此我想将其省略。

应加载的 ClassA 文件示例:

Id: "some-id" # Irrelevant for this example. ;-)
ClassB: "some-classb-id"

ClassA 拥有指向 ClassB 对象的一个指针。加载程序现在反序列化 ClassA 并且加载任何 ClassB 对象,而只是与已经存在的 ClassB 对象建立关系。这是因为 ClassB 对象是预加载的,而 ClassA 对象可以在运行时添加。

ClassA 中的 ClassB 指针可能为 NULL,这完全没问题(这是一个可选关系)。

最佳答案

我只想到了 2 种方法:

  • 最简单的方法是 定义 ClassB 的 1 个所有者 (ClassC) 对象,然后将 ClassB 传递给 用户ClassA。这意味着添加 依赖于另一个(新)类,但据我所知,一些类仍然必须分发 ClassB。
  • 再脏一点就够了 ClassA 只加载 ClassB 和 ClassB 第一次加载。但这会 不允许加载 ClassB 超过 一次(解决方案可能是通过一个新的 需要时将 B 类转到 A 类。

关于c++ - 1 :n relation in OOP regarding to deserialisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536364/

相关文章:

java - 如何用多态替换switch?

java - 自动刷新jcombobox

javascript - 基于类和基于对象的语言比较(ECMAScript 规范)

multithreading - Perl 线程与对象析构函数

c++ - 执行 cmake 目标的输出作为另一个依赖项

c++ - Glvalue 引用一个基类子对象

c++ - 用 int 值初始化 vector <char>

c++ - 在 C++ 中为树创建新结构

C++ 模板将某种类型的成员添加到类中

c++ - 复合模式 : Copy tree structure