ファイルに書き込まれるデータを表すために構造体を使用します。この構造体にメンバーを追加する必要がある場合(つまり、余分なデータを保存する必要がある場合)、元の構造体から派生した新しい構造体(これはデータセットの新しいバージョンを表します)を作成します。したがって、たとえば:
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
からコピーするためにコンストラクターを入れることを考えましたdata1
が、それは私が取得した自由な値の初期化を壊します(その時点で独自のデフォルトコンストラクターを実装する必要があります)。memcpy()を使用する必要がありますか、それともより優れた組み込みの方法がありますか(おそらくコピーセマンティクスのトリック)?