問題タブ [boost-serialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 可変メンバーによるboost::シリアル化
boost :: serializationを使用して、可変メンバーにキャッシュされた派生値を含むオブジェクトをシリアル化する「最良の」方法は何ですか?
メンテナンス上の理由から、serialize()を別々のsave()メソッドとload()メソッドに分割することは避けたいと思います。
シリアル化の1つの次善の実装:
これは逆シリアル化の場合を処理しますが、シリアル化の場合、キャッシュされた値は強制終了され、再計算する必要があります。
この場合のベストプラクティスは何ですか?
c++ - XSTREAMと同様のC++シリアル化クリーンXML
設定をXML形式で保存し(手作業で簡単に編集できるように)、ソケットとHTTPを介してXMLメッセージを介して既存のアプリと通信するLinuxc++アプリを作成する必要があります。問題は、私を助けるインテリジェントなライブラリを見つけることができなかったことです。非常に単純なメッセージを書き込んだり読んだりするためだけにDOMまたはSAXコードを書く気は特にありません。
Boost Serializationはほぼ一致しましたが、生成するxmlに多くのBoost固有のデータが追加されます。これは明らかにインターチェンジ形式ではうまく機能しません。BoostSerializationまたは他のc++シリアル化ライブラリでクリーンなxmlを生成できるかどうか疑問に思っています。バージョン属性など、必要な追加の属性があるかどうかは気になりませんが、それらの名前を制御し、使用しない「機能」を削除できるようにしたいと思います-tracking_levelとclass_id for実例。
理想的には、Javaのxstreamに似たものが欲しいだけです。私は、C ++には内省がなく、したがって手動でコーディングする必要があるという事実を認識しています。しかし、単純なXMLを恨みなく読み書きするだけのクリーンなソリューションがあれば、それは素晴らしいことです。
これができない場合は、XMLスキーマが正規のリソース(最初にコントラクト)であるツールにも興味があります。これは、C++に代わる優れたJAXBです。これまでのところ、CodeSynthesisXSDのような商用ソリューションしか見つかりませんでした。私はオープンソースソリューションを好みます。私はgSoapを試しましたが、それは本当に醜いコードを生成し、SOAP固有でもあります。
必死になって、私はプロトバッファの代替シリアル化フォーマットも検討し始めました。これは存在しますが、Javaの場合のみです。プロトコルバッファがXMLよりもサポートされているデータ交換形式の方が優れているように思われることに本当に驚いています。
私はこのアプリのライブラリを見つけるだけで怒ってしまいます。本当にいくつかの新しいアイデアが必要です。誰?
c++ - ブースト シリアライゼーション ライブラリのアップグレード
既存のデータとの互換性を損なうことなく、実稼働システムでBoost Serialization Libraryを安全にアップグレードできることをどのように確認できますか? ライブラリの以前のバージョンによってバイナリ形式で保存されたすべてのデータが新しいライブラリによって正常に読み取られることを確認するために実行する必要があるテストはありますか? Boost Serialization ライブラリ自体は、バージョン間の何らかの互換性を保証しますか?
c++ - Boost.Serialization を使用してカスタム XML 形式を解析する
オブジェクトにシリアル化する必要があるカスタム XML 形式があります。
特定のタグをシリアル化するだけで、残りは無視できます。
独自のアーカイブ クラスを作成する必要があるような印象を受けましたが、その方法を説明するドキュメントはありません。
オブジェクトの初期状態をロードするだけで、何も保存する必要はありません。
誰か私へのポインタを持っていますか?
c++ - boost::serialization を使用してオブジェクトのマップを xml にシリアライズする
以下のシリアル化の例は、boost メーリング リストからのもので、私がやりたいこととほとんど同じです。ただし、XML にシリアル化されるようにアーカイブを変更しました。バイナリにシリアライズしてもコンパイルは失敗しませんが、xml にシリアライズするとコンパイルに失敗します。basic_xml_oarchive.hpp
次の方法でコンパイルが失敗します。
オブジェクトをシリアル化できるようにするのに十分ではないようですがstd::map<int, CSomeData>
、これを修正する方法についてのアイデアはありますか?
私のシリアライゼーションの実装:
c++ - Serialization tree structure using boost::serialization
I have to serialize libkdtree++ in my program, the tree structures are briefly described as following:
This program reports "stream error". But from the "serailzed file", it lacks the value fields for the children nodes of roots. Thus I think it is possible that BaseNode serialized _M_left and _M_right pointer. However since _Node_base have no idea about the value type of _Node, so it looks hard to add "ar.register_type" to _Node_base.serialize().
c++ - boost::serialization の BOOST_CLASS_EXPORT をどこに置くか?
ポリモーフィック クラスへのポインターをシリアル化しようとしていますShape
。BOOST_CLASS_EXPORT
そのため、マクロを使用して各サブクラスの GUID を定義する必要があります。問題:どこに置く?
最初に最小限のテスト ケースを示します。
形状.hpp
export.cpp
main.cpp
gccでは、これらをコンパイルします
ここでexport.cpp
は、少しばかげているように見えるかもしれません。私の実際の状況では、PIMPL イディオムを使用するエンクロージング クラスが含まれており、その (ポリモーフィック)Shape
実装をシリアル化しようとします。重要な点は、シリアル化を呼び出すコードとは異なるオブジェクト ファイルBOOST_CLASS_EXPORT
にある可能性があることです。
だからここに問題があります:どこで使用するのBOOST_CLASS_EXPORT
ですか?EXPORT_IN_XXX
マクロを使用して有効にできる 3 つのオプションがあります。
EXPORT_IN_MAIN
動作しますが、私が望むものではありません。シリアル化を呼び出すコードは、PIMPL クラスの実装の詳細について知る必要はありません。EXPORT_IN_OBJECT
コンパイルされますが、動作しません:boost::archive::archive_exception
メッセージ付きの結果になりますunregistered void cast
。documentationによると、これは、私が行ったように、を使用して基本クラスをシリアル化することで解決する必要がありますboost::serialization::base_object
が、役に立ちません。EXPORT_IN_HEADER
コンパイルさえしません。マクロBOOST_CLASS_EXPORT
は、テンプレートの特殊化 (ヘッダー ファイルに含めたい) に展開されますが、その中の静的メンバーの定義にも展開されます。そのため、a に関するリンカ エラーが発生しますmultiple definition of 'boost::archive::detail::init_guid<Rect>::guid_initializer'
。
問題があれば、g++ 4.4.3 と Boost 1.40 を使用しています。
c++ - boost::serialization を使用して XML にシリアライズする
これは初心者の質問です。いくつかのオブジェクトを XML にシリアライズしようとしていますが、結果の XML にはブースト シリアライゼーション シグネチャ、バージョン情報、クラス ID などが含まれています。私は必要ありません。xml メッセージを後処理せずにそれらを取り除く方法はありますか?
結果:
ただし、これらのメッセージを文字列にシリアル化し、メッセージがこのように見えることを期待するシステムに送信します。
署名なしでxmlをシリアライズする方法はありますか?
c++ - ブースト シリアライゼーション ライブラリを使用して stdext::hash_map をシリアライズする
ハッシュ マップをファイルにシリアライズし、後でデシリアライズしたいと考えています。
しかし、私はエラーが発生しています -
エラー C2039: 'serialize' : 'stdext::hash_map<_Kty,_Ty>' のメンバーではありません
このエラーをオンラインで検索しましたが、あまり役に立ちませんでした。また、ブーストのインストールに機能serialization/hash_map.hpp
があることを確認しserialize()
ました。のシリアル化でも同じコードが機能しましたstd::deque
。コンパイルするにはどのように変更すればよいですか?
c++ - Boost.Serializationは、プラットフォームごとにシリアル化が異なりますか?
Boost.Serializationを使用してstd::mapをシリアル化します。コードは次のようになります
MacSnowLeopardとUbuntuLucid10.04でコードをコンパイルしてテストしました。両方のシステムにBoost1.40があります。Macでは、自分でコードを作成しました。Ubuntuボックスで、aptitudeを介してバイナリを取得しました。
問題:Macでマップをシリアル化すると、Ubuntuボックスでマップを逆シリアル化できません。試してみると、無効な署名例外が発生します。