私はホットアップグレード機能を開発中で、構造体の配列をパッケージ化して、新しいバージョンが見つかるようにしておく必要があります。私は本当に可能なすべてのバージョンの移行のための変換関数を追加することを避けたい。これは妥当ですか?
構造体への変更の可能性が最も高いのは、今後構造体に追加するフィールドが増えた場合です。この場合、新しいフィールドのデフォルト値が使用可能になります。まもなく、構造体の配列を構成ファイルに保存する作業に直面するため、ホット・アップグレードと構成の保存の両方に適用できる回答が追加されます。
私はちょうどそれをポインタとサイズを与え、より多くのフィールドがあるために、それは構造体への最も可能性の高い変更は幻想的な魔法:)あなたのコードの将来のバージョンにC構造体を送りますか?
2
A
答えて
10
をあるんホット更新メカニズムを心配する必要はありません将来的に構造体に追加され、この場合、新しいフィールドのデフォルト値が使用可能になります。
バージョン1以降、常に各構造体の先頭にフィールドとしてsizeof(myStruct)
を含めます。次に、新しいフィールドを追加する必要があるときは、常に各構造体の最後で行い、途中では行いません。今すぐ受信(またはファイルからの読み取り)、最初にサイズフィールドのみを読み取るので、何バイト後に来るかを知っている。サイズがsizeof(myStruct)
未満の場合は、何かが欠落していることがわかり、デフォルト値が必要です。
7
バージョン管理を自動的に処理するGoogleのprotocol buffersのようなものを使用することをおすすめします。メッセージに新しいフィールドを追加すると、処理が非常に簡単になります。
関連する問題
- 1. 将来のバージョンのC#で「拡張プロパティ」の計画はありますか?
- 2. Apacheの将来のバージョン
- 3. は、C++の構造体とC#の構造体に違いがありますか?
- 4. JavaにCの構造体がありますか?
- 5. MATLABの構造体に構造体を作成するには? Cコードで
- 6. C構造体内の構造体内部の構造体
- 7. 構造体へのcコードの参照
- 8. rake db:structure:dumpの構造体はどこから来ましたか?
- 9. C#の構造体へのポインタをC++ DLLに送信する
- 10. 構造体内に `initializer_list` ctorを持つ構造体はありますか?
- 11. C++にJava初期化ブロックのような構造体がありますか?
- 12. 異なる構造体内の構造体へのポインタ。 C
- 13. C#の構造体をCの構造体に変換するには?
- 14. ある構造体を別の構造体にコピーする
- 15. C構造体、構造体へのポインタ、適切な初期化
- 16. 構造体の配列に問題がありますか?
- 17. C構造体の割り当て?
- 18. Cの関数から構造体を割り当てます。
- 19. C++の構造体のオーバーロード
- 20. C++の構造体のデータメンバー
- 21. Cにcppのコードを変更する(構造体型)
- 22. C:構造体内の構造体要素へのポインタ
- 23. C#:構造体内の構造体へのポインタ
- 24. 構造体定義のバージョンIDを生成しますか?
- 25. pipe()構造体を子から親に送ります。 read()の中の象形。
- 26. (.net).net Explicit構造体とC++共用体の間には本質的な違いがありますか?
- 27. C++のenumと構造体
- 28. c構造体の関係
- 29. C++匿名の構造体
- 30. cのポインタと構造体?
ここにC(非++)ポートがあります:http://code.google.com/p/protobuf-c/ –