我总是对这样的限制感到困惑。Boost 就在那里,它可以工作,只需要几个小时就可以添加到项目中,然后立即解决问题——而是花费数周时间重新实现锯齿轮。
如果你不使用 boost 你仍然可以学习它。代码本身可能会像往常一样使用宏,但界面可以提供洞察力。
如果你有 MSVC,无论是旧版本,都可以研究 MFC 的设计和实现。一个非常简单,您可以使用这些想法来创建自己的变体。猜猜你可以找到更多现有的框架。
基本思想很简单,您有一个类似 CArchive 的类来管理序列化、拥有数据流并为原始类型提供 I/O。通常使用一个公共函数的重载集加上一些特殊的变体。
然后,通过为每个数据成员调用该函数,使所有类实现自己的加载和保存。它可以是侵入性的,也可以使用重载的自由函数或专门化模板或它们的某种组合。还在某处添加了对序列化集合的支持——这并不难,因为它只是迭代并在项目上调用序列化。对于智能指针。
困难的部分是处理指针,尤其是共享指针——如果运气好的话,你可以避开它。
存储格式是任意的,您甚至可以在存档管理器中更改它,而不会引起任何人的注意。除了您想要在内容旁边使用标签的类 XML 存储之外,您必须在界面中对此进行计划。
对于多态指针,您将需要更多支持、一些工厂设施和标识符。
然后放弃模式处理,因为几周后你的类会改变,人们仍然想加载昨天的文件。
您确定要避免使用 boost 或其他库存解决方案吗?