問題タブ [cereal]
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++ - C++ 11 シリアル ライブラリは私のクラスをシリアル化できません
私はシリアルライブラリを使用しており、カスタム コンストラクターを使用して派生型の shared_ptr インスタンスを取得して、アーカイブに正しくフィードしようとしています。私は次のドキュメントに注ぎ込みましたが、明らかに何かが欠けています。
私の階層のクラスは次のとおりです。
そして、これは私が実行しようとしているテストコードです:
私の「サイズ」タイプは正しくシリアライズされます。cereal/types/memory.hpp、cereal/types/map.hpp、cereal/types/string.hpp、および cereal/types/base_class.hpp も含めていますが、上記の FileTextureDefinition のテストを実行しようとすると、次のエラー:
textures.h ヘッダー ファイルの完全なリンクは、こちらのペーストビンにありますが、関連するセクションと思われるものを含めました。
c++ - C++11 シリアル: load_and_allocate が正しく読み込まれない
C++11 シリアル化ライブラリであるcerealを使用しています。これがライブラリのバグなのか、それとも私の使用方法の問題なのかはわかりません。サポートが必要です。
私自身のコードを代表する (しかし依存していない) 次の最小限の再現を考えると、JSONInputArchive::search から例外がスローされます。
私は現在、この github reproで 436a0a275cda007f137876f37b4fc8783e615352 をコミットしています (執筆時点では、開発ブランチの先端です。)
上記から取得したサンプル出力 (例外の前) は次のとおりです。
問題をデバッグするために、throwing メソッド (cereal/archive/json.hpp 内) を変更して、検索対象と検索対象の各値を出力しました。ここに私の修正版があります:
例外の前の上記のメソッドの出力:
これから得られる出力は、検索が「test.ptr_wrapper.data」ではなく「test.ptr_wrapper」のメンバーを調べていることを示しているようです。
私の質問はこれです: 私は何か間違ったことをしていますか? それとも穀物に問題がありますか?
c++ - Cereal / C++ を使用して std::map のより単純な JSON (デ) シリアル化を指定する方法はありますか?
私が取り組んでいるプロジェクトは、多数のカスタム ハードウェア デバイスを管理する C++ アプリケーションです。アプリには、クライアント用のソケット/ポート インターフェイスがあります (GUI など)。各デバイス タイプには明確に定義された独自の JSON スキーマがあり、Cereal を使用してそれらを適切にシリアル化できます。
ただし、アプリはクライアントからの受信 JSON 要求も解析する必要があります。要求の一部でデバイス フィルタ パラメータが指定されています。これは、すべての式が AND で結合されている SQL の 'WHERE' 句にほぼ類似しています。例えば:
これは、クライアントが「クリティカル」ステータスのすべての「センサー」デバイスで操作を実行したいことを示します。表面的には、フィルター パラメーターの C++ 実装は std::map のように見えました。しかし、Cereal を使用してオブジェクトを逆シリアル化する実験を行ったところ、失敗しました。ハードコードされたフィルター マップをシリアル化すると、次のようになります。
これで、Cereal がこの種の詳細なマップのシリアル化をサポートする理由が理解できました。結局、マップのキーは文字列以外の型である可能性があります。ただし、この場合、キーは文字列です。
私は、Cereal を満たすためだけにインターフェイスの仕様を書き直して、クライアントが明らかに慣用的ではない JSON を生成することにあまり熱心ではありません。私はシリアルが初めてで、この点にこだわっています。このフィルターを std::map として解析するように Cereal に指示する方法はありますか? あるいは、私は間違った方法でそれを求めているのかもしれません。逆シリアル化する必要がある他の stl コンテナーはありますか?
c++ - シリアル - 複数の逆シリアル化
私は穀物に非常に慣れていないので、(おそらく簡単な)質問があります:
(XML) アーカイブ内のオブジェクトの数がわからない場合、複数のオブジェクトを逆シリアル化する方法はありますか?
私は次のようなものを試しました:
XML ファイルに 3 つのオブジェクトがあり、受け取った XML にオブジェクト番号が含まれていないとします。したがって、私のコードでは、最初の 3 回の繰り返しは問題ありませんが、4 回目では「CerealTest.exe の 0x0035395E で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000018」が生成されます。
何か提案はありますか?
c++ - Cereal ライブラリを使用した Eigen::Matrix のシリアル化
更新:ググってコード内の doxygen コメントを読んだ後、なんとか動作させることができました。resize()
問題は、メソッドを使用する前にキャストを見逃しstd::ios::binary
、ストリームにも使用しなかったことです。同様のことをしたい場合は、Azoth の回答を確認してください。
Eigen::Matrix
Cereal を使用して型をシリアル化しようとしています。これは私が持っているものです( https://gist.github.com/mtao/5798888とのタイプに大まかに基づいていますcereal/types
):
c++ - enable_shared_from_this を使用したシリアル ライブラリ エラー
編集: エラーを簡単に再現できるように最小限の VS ソリューションを作成しました: https://www.dropbox.com/s/pk0t8t2xykjmtc5/test%20cereal%20this.zip ($(LIBSROOT) の代わりにインクルードにシリアルを追加します。それを持っている)。
デフォルトのコンストラクターがないことを示す 2 つのエラーが表示されます。
しかし、クラスのデフォルトのコンストラクターは問題ないと思います。Node クラス変数のシリアル化をコメント アウトすると、同じエラーが発生しますが、Part クラス変数で発生します。
次のコード構造があります (インクルード ガードや無関係なコードなどの一部は省略されています。もちろん、必要に応じてすべてを提供できますが、できるだけ短くしたかったのです)。
シェイプ.h:
シェイプ.cpp:
Node.h:
ノード.cpp:
パート.h:
パート.cpp:
Contact クラスにはメンバー変数として PartPtr が含まれ、PointCloud には一連の Eigen::Matrix データのみが含まれます (コードを高速化するために、おそらくスマート ポインターも必要ですが、この問題では重要ではありません)。
これを修正する方法はありますか?それともバグである可能性がありますか?私はVS2013を使用していますが、これも原因である可能性があります。
windows - VS2013はシリアルでシリアル化するために異なるクラスでいくつかのdllファイルを作成します
いくつかのポリモーフィック クラスを分割して、シリアル化して dll ファイルにしようとしました。次に、未登録のポリモーフィック型の例外が発生します。問題は、コードがポリモーフィック オブジェクトのルックアップに使用されるマップの 2 つのインスタンスを作成することです (テンプレート クラス cereal::detail::StaticObject によって保持されます)。シリアル化を行うプロジェクトに CEREAL_REGISTER_TYPE を入れると、すべてうまくいきます。
だから、dllファイルに登録できるようにするためのトリックを行うことができるかどうか、誰かが知っているのだろうか?
プログラムに cereal::detail::StaticObject クラスの同じインスタンスを使用させることはできますか?
c++ - シリアル化して型情報を省略してデータをシリアル化する
型情報をシリアル化せずにデータをシリアル化することは可能ですか? シリアルを使用してデータをパケットにシリアル化し、ネットワーク経由で送信しており、パケットサイズをできるだけ小さくしたいので、タイプ情報を含めないでください。
これが可能であると私が考える唯一の理由は、アプリケーションが送信側と受信側で型情報とそれがシリアル化された順序を既に知っているという事実によるものです。
実際の実装からデータをシリアル化および非シリアル化する方法を正確に理解するのは簡単です:
NetPacket.h
NetPacket.cpp
NetPacket.h で定義されている ReadData と WriteData からわかるように、データを読み書きするには、型情報をテンプレート関数に指定する必要があります。この要件により、型情報はリーダーとライターで認識され、どの順序で書き込まれたかがわかります。データをシリアル化するときに型情報を省略する方法はありますか?
大きな質問で申し訳ありません。この件についてお時間を割いていただき、誠にありがとうございます。