2011-10-24 7 views
3

私は32ビットプロセスと64ビットプロセスの間でいくつかのデータ構造を同じWindowsマシン上でboost :: serializationでシリアル化したいと思っています。私はしたくないものをtext_iarchive以外のこれを(行うための別の方法がありますboost :: serialization - std :: wstringsをバイナリシリアル化するポータブルな方法はありますか?

// implementation only valid for narrow string 
BOOST_STATIC_ASSERT(sizeof(C) == sizeof(char)); 

This answer

はEOS :: portable_iarchiveを用いることが提案されているが、私がすることを試みたとき、私はSTATIC_ASSERT障害を得ましたperfの考慮事項のために使用する)は、std :: wstringsもサポートしていますか?

+0

Boostのどのバージョン? –

+0

1.47 /最新ですが、私が得ることのできるアドバイスはあります。 –

答えて

1

私が読んだところから、ワイド文字列をシリアル化する標準的な方法は、最初にUTF-8の狭い文字列としてエンコードすることです。しかし、これはあなたが望む以上にオーバーヘッドになる可能性があります。

Boost.Serializationのサンプルディレクトリに、ポータブルバイナリアーカイブの代替実装があります。 Boost.Serialization documentationはポータブル浮動小数点サポートの欠如や厳しいテストの欠如などの最大の欠点のように聞こえるので、ポータブルフロートを必要としない場合は、あなたのニーズを満たすかもしれません。

他のシリアライゼーションライブラリを見たことがあるかどうかはわかりませんが、libs11nProtocol Buffersなどいくつかの選択肢があります。 (個人的にはBoost.SerializationとProtocol Bufferの両方を使用していましたが、私はプロトコルバッファを好む)

+0

奇妙な私は、ブーストの例のフォルダにそのportable_binary_archiveを見逃しました。 Windows下で混在した32/64ビット環境で使用するとうまく動作しているようです。ありがとうございました! –