私はstlデータ構造もシリアル化するいくつかの直列化ロジックを持っています。現在、私はサイズフィールドと構造体の各要素を反復処理して書きます。デシリアライズでは、サイズフィールドを読み、データ構造を読み終わった時点を知っています。iterator :: difference_typesはシステムに依存しません
サイズフィールドを正しく書き込む方法とシステムに依存しない方法はありません。現在、ファイルに格納するタイプとしてstd::iterator_traits<const_iterator>::difference_type
を使用しています。しかし、私は、このタイプがシステムに依存しないことが保証されている場合や、異なるシステム間でファイルを交換しようとするときに、変更される可能性があるかどうかはわかりません。
このタイプはstd::string
です。この場合、sizeof(std::iterator_traits<std::string::const_iterator>::difference_type)
は64ビットマシンで8を返します。だから私はこの場合、これはちょうど1ワードを占めるsize_t
のtypedefであると思います。私は現在32ビットのマシンを持っていないので、サイズが違うかどうかは確認できません。
これは、ポータブルスタンダードによって保証されていますか?または、長さをエンコードするために、ここですべてのデータ構造に固定タイプを使用すべきですか?
ここで固定サイズのタイプを使用して、プラットフォーム間で確実に動作するようにします。私はすでにバイトオーダーの問題を考慮しているので、ここでは小さな符号なし整数型を使用します。他のすべての型は、署名とサイズに関して完全修飾されているので、これは問題ではありません。 – LiKao