2009-07-17 4 views
2

私はホットアップグレード機能を開発中で、構造体の配列をパッケージ化して、新しいバージョンが見つかるようにしておく必要があります。私は本当に可能なすべてのバージョンの移行のための変換関数を追加することを避けたい。これは妥当ですか?
構造体への変更の可能性が最も高いのは、今後構造体に追加するフィールドが増えた場合です。この場合、新しいフィールドのデフォルト値が使用可能になります。まもなく、構造体の配列を構成ファイルに保存する作業に直面するため、ホット・アップグレードと構成の保存の両方に適用できる回答が追加されます。
私はちょうどそれをポインタとサイズを与え、より多くのフィールドがあるために、それは構造体への最も可能性の高い変更は幻想的な魔法:)あなたのコードの将来のバージョンにC構造体を送りますか?

答えて

10

をあるんホット更新メカニズムを心配する必要はありません将来的に構造体に追加され、この場合、新しいフィールドのデフォルト値が使用可能になります。

バージョン1以降、常に各構造体の先頭にフィールドとしてsizeof(myStruct)を含めます。次に、新しいフィールドを追加する必要があるときは、常に各構造体の最後で行い、途中では行いません。今すぐ受信(またはファイルからの読み取り)、最初にサイズフィールドのみを読み取るので、何バイト後に来るかを知っている。サイズがsizeof(myStruct)未満の場合は、何かが欠落していることがわかり、デフォルト値が必要です。

7

バージョン管理を自動的に処理するGoogleのprotocol buffersのようなものを使用することをおすすめします。メッセージに新しいフィールドを追加すると、処理が非常に簡単になります。

+1

ここにC(非++)ポートがあります:http://code.google.com/p/protobuf-c/ –

関連する問題