我使用结构来表示写入文件的数据。如果我需要向这个结构添加成员(即保存额外的数据),我会创建一个从原始结构派生的新结构(这代表数据集的新版本)。例如:
struct data1
{
int stuff1;
int stuff2;
};
struct data : data1
{
int stuff3;
};
通过检查我们是否正在加载来保持向后兼容性,如果是data1
,则将其转换为data
(并且仅对 中的那些新成员进行值初始化data
)。最好的方法是什么?这是我开始的:
if( loaded_data.size() == sizeof(data1) ) {
// Old data format detected, upgrade to new structure
data d = data(); // value-initialize everything
// TODO: Assign 'data1' to 'data'
}
我曾想过将构造函数放入data
从 a 中复制data1
,但这会破坏我得到的自由值初始化(那时我必须实现自己的默认构造函数)。我应该使用 memcpy(),还是有更好的内置方式(可能是一些复制语义的技巧)?