問題タブ [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++ - Cereal は raw ポインターをサポートしていません
編集:質問のタイトルは、私が得たコンパイラ エラーの深い誤解に基づいていました。私は(ばかげて)エラーが、関数内で宣言したオブジェクトに逆シリアル化しようとしたと仮定していました。これは完全に間違っていました。自分で十分なデバッグ作業を行っていないか、何が問題なのかを突き止めることができたはずです。そのため、タイトルがかなり誤解を招くものだったので、変更しました。助けてくれた Андрей Беньковский に感謝します。
私は、シリアルを使用してエンジンで 3D モデルのシリアル化関数を作成しています。これは、非常に効率的で使いやすいことが証明されています。これまでのところ、単純なメッシュのシリアル化 (逆) をテストしたところ、すべてうまくいきました。しかし、今、別のクラスを逆シリアル化しようとしていますが、問題が発生しました。
これは私のクラスで、逆シリアル化する必要があります:
それは私にコンパイラエラーを与えます:Cerealは生のポインターのシリアル化をサポートしていません-それはポインターではありませんが、スマートポインターを使用してください。コードの別の部分では、同様のことがうまく機能します。誰かがこれを解決するのを手伝ってくれたらうれしいです。
c++ - Cereal を使用して、サブオブジェクトで囲まずに json オブジェクトをシリアル化する方法
次のような C++ のクラスがあるとします。
Cereal を使用して、その構造体を JSON にシリアライズしたいと考えています。そこで、次のようなシリアル化関数を追加しました。
Point が別のオブジェクトのメンバーまたは配列の要素である場合、これは正常に機能します。しかし、Point を JSON ファイル全体の主要なオブジェクトにしたい場合、正しく機能しません。たとえば、次のコードを使用します。
次の出力が得られます。
"value0"
次のように、キーを削除し、ファイル全体を占めるようにオブジェクトを昇格させたいと思います。
私がそれを行うことができる唯一の方法は、基本的にシリアライゼーション関数を再実装し、キー名を手動で追加することです。
クラスに既に実装したシリアル化機能を利用してそれを行う方法はありますか?
c++ - Cereal を使用して、ポリモーフィック クラスで C スタイルの配列シリアル化を使用する方法は?
ここに簡単なクラスがあります:
これは正常に動作しています。つまり、シリアライゼーションのインとアウトは問題なくテストされています。
ここでポリモーフィズムを使用したい場合に問題が発生します。このドーター クラスは、他の「ドーターのような」クラスと同様に、純粋な仮想マザー クラスから継承します。
CEREAL_REGISTER_TYPE(...)
そして、マクロを使用して clDaughter クラスを登録したい場合、
コンパイラがクラッシュする
「シリアルは、指定されたタイプとアーカイブの組み合わせの出力シリアル化関数を見つけることができませんでした」
配列をループでシリアル化すると(醜いスタイル) 、このbinary_data(...)
方法に問題があるようです。__pData
エラーは発生せず、正常に動作します。binary_data()
と併用する場合のみCEREAL_REGISTER_TYPE()
です。
私は何を取りこぼしたか ?
(質問を先取りするbinary_data()
ために、ループよりも20〜30倍高速であり、ここで高速である必要があるため、使用したいと思います)
お手伝いありがとうございます
c++ - XMLに変更した後、「シリアルは出力シリアル化関数を見つけることができませんでした」
theia というライブラリで Reconstruction クラスをシリアライズしたいと考えています。クラス Reconstruction にはシリアル化機能があります。
既に設定されているシリアライゼーションは、次のように正常に機能します。
しかし、それを XMLOutputArchive に変更すると (必要な #include を追加して)、機能しなくなりました!
エラーは次のとおりです。
[...]
c++ - シリアルを使用してboost::ptr_vectorをシリアル化する方法は?
boost::ptr_vector
シリアルを使用してインスタンスをシリアル化することは可能ですか? もしそうなら、どのように?
c++ - 仮想継承とポリモーフィズム: シリアル ライブラリはオブジェクト レイアウトをいじっていませんか?
古典的なひし形パターンに続く4 つのクラス ( A
、および) とB
、を含むクラスがあります。シリアルシリアル化ライブラリを使用してこれらのクラスをシリアル化したいです。C
D
Container
unique_ptr<A>
すべてのクラスには cerealsave
とfunctions がありますが、この例で使用されているのは と だけなので、とload
にのみ含めました。B
Container
これらのクラスを次のように使用します。
そして、次の出力が得られます。
私の質問は次のとおりです。これは穀物のバグである可能性が高いですか、それとも仮想継承で取得できないものがありますか?
特定のオブジェクトのフィールドのアドレスが C++ プログラムで変更されることは予想されますか?
c++ - 名前付きの値のペア (nvp) を持つポリモーフィック型を逆シリアル化するときの「シリアル::例外」
名前付きの値のペアをシリアル化したポリモーフィック クラスを逆シリアル化しようとすると、「JSON の解析に失敗しました - 提供された NVP が見つかりません」というメッセージとともに「cereal::Exception」が発生します。私は何か間違ったことをしていますか?
ここにヘッダーがあります:
そして私のcppファイル:
c++ - C++ CMake コンパイル エラー (/usr/bin/ld: が見つかりません)
*これについて多くの質問があることは知っていますが、CMakeについて話すときはあまり役に立たないため、質問をするという私の決定*
そのため、コンパイラにパラメーターをインポートして与えるためにCMakeを使用するCLionに取り組んでおり、「ExternalLibraries」というフォルダーにある外部ライブラリ(シリアル:クラスをjsonファイルにシリアル化する)を正常にインクルード(インポート)しました私のプロジェクトフォルダーのルート。IDEを再起動してコードを再度実行しようとするまで、問題なく動作していました...コンパイルエラーが返されました(と思います)。
私の CMake ファイルは次のようになります。
そして、シェルを実行/コンパイルしようとすると、次のようになります。
ライブラリが実際にコードにインポートされているように見えるため、何が起こっているのかわかりません (シリアルを含めると赤い文字はありません)。
私のCMakeファイルに何か問題があるかどうか誰かに教えてもらえますか?
PD: 誰かがそれを必要とする場合に備えて、これはスクリーンショットです。
PD2: 私は基本的な os を使用しています: Freya (Ubuntu 14.04)
c++ - Cereal を使用した C++ シリアル化 - ポリモーフィック クラスを最適にシリアル化する方法
オブジェクト グラフ (実際にはツリー) のシリアル化をCerealで実装しようとしています。
Cereal は、生のポインター (これらのポインターが指すオブジェクト) のシリアル化をサポートしていません。私の現在のアイデアはgetType()
、オブジェクトに関数を持たせてその型を見つけ、その型に応じてファクトリでそれらを構築することです。
正しいオブジェクトが作成されたら、アーカイブで初期化できます。
getType()
すべてのクラスがその関数から一意の型を返す必要があるため、これは明らかに理想的なソリューションではありません。
このアーキテクチャをどのように改善できますか?