我已尝试仔细阅读C++FAQ中有关此主题的所有建议。我已经根据项目 36.8实现了我的系统,现在几个月后(有很多数据序列化),我想对一些类的公共接口和继承结构本身进行更改。
class Base
{
public:
Vector field1() const;
Vector field2() const;
Vector field3() const;
std::string name() const {return "Base";}
};
class Derived : public Base
{
public:
std::string name() const {return "Derived";}
};
我想知道如何进行更改,例如:
拆分
Derived
为Derived1
和Derived2
,同时将原始数据映射Derived
为Derived1
现有数据。拆分
Base::field1()
为Base::field1a()
和Base::field1b()
同时映射field1
到现有数据field1a
并为field1b
空。
我将必须
- 反序列化所有千兆字节的旧数据
- 将它们转换为新的继承结构
- 以一种新的、更灵活的方式重新序列化它们。
我想知道如何让序列化更灵活,这样当我决定将来做一些改变时,我就不会像现在一样面临转换地狱。
我想制作一个使用数字而不是名称来序列化我的对象的系统。例如 Base = 1, Derived1 = 2, ... 和一个单独的number-to-name系统,可以将 numbers 转换为 names,所以当我想更改某个类的名称时,我只会在这个单独的数字到名称系统,无需更改数据。
这种方法的问题是:
系统会很脆弱。那就是改变数字到名称系统中的任何东西都可能改变千兆字节数据的含义。
序列化数据会失去一些人类可读性,因为在序列化数据中,会有数字而不是名称。
很抱歉将这么多问题放在一个问题上,但我对编程缺乏经验,而且我面临的问题似乎如此巨大,以至于我不知道从哪里开始。
任何关于灵活连载的通用材料、教程、习语或文献都非常受欢迎!