-4

私は現在、Linuxでコンパイルしたいvs2012でコードを書いています。進行状況をシリアル化してファイルに保存し、その保存ファイルに 32 ビットと 64 ビットのアーキテクチャ、および Windows と Linux の両方でアクセスできるようにしたいと考えています。

シリアル化ライブラリを使用したくありません。

これを実現するために、バイナリ ファイルでの格納と取得のために、型、つまり float、double、int32、および int64 (符号付きおよび符号なし) を固定長およびポータブル プリミティブに変換および取得できる関数が必要です。私の理解では、bool 型と char 型は標準で指定されているため、すでに移植可能です。

パフォーマンスは重要ではありませんが、サイズは重要であるため、ここでは ASCII は実行可能なソリューションではありません。たとえば、指定した固定長よりも大きなビット長をプラットフォームが使用したり、その逆の場合に、精度がいくらか失われてもかまいません。

私は初心者なので、エンディアン、IEEE などについてあまりにも多くの話をすると、私は混乱し、イライラします。

私は、箱から出してすぐにこれらの変換を行うライブラリに特に興味がありますが、それがこれを達成する唯一の方法である場合は、独自のものを展開することを検討します.

参考までに、boost はスマート ポインターでは機能せず、シリアルは VS2012 では機能せず、Microsoft のものは Linux では機能しないため、シリアライゼーション ライブラリは必要ありません。これらを機能させるために落書きをしなければならない場合は、自分でやったほうがいいと思います。

何か案は?

編集:ブーストシリアル化ライブラリのc ++ 11互換性について教育を受けているので、喜んでその解決策に落ち着きます。

4

2 に答える 2

3

@ausairmanブーストシリアライゼーションは、スマートポインターで非常にうまく機能します:

#include <boost/serialization/shared_ptr.hpp>

サンプル ( http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/tutorial.html#examples ) はこれを示しています。また、この例ではエイリアシングのように見え、サイクルはデフォルトで処理されます。

エンディアンやその他の移植性の問題があなたを混乱させると率直に述べているので、これを自分で書かないことを心からお勧めします(純粋に学習の目的でない限り)。

于 2013-09-18T00:00:13.740 に答える
3

プラットフォームに依存せず、シリアル化するのと同じ形式で値をメモリに保存することに興味がある場合は、Google の Protobuffers 2.0 と同じ作者によって書かれた Cap'n Proto を検討してください。

スマート ポインターが使用されているかどうかはわかりません。オブジェクトを書き直して、プリミティブ値の代わりに Cap'n proto 構造体を使用する必要があるかもしれませんが、これはあなたが望むものに最も近いようです。

http://kentonv.github.io/capnproto/

于 2013-09-18T00:01:54.750 に答える