問題タブ [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++ - 逆シリアル化されたシリアル .xml ファイル (Cereal、C++11) のデータにアクセスする方法の例を探す
シリアルを使用して、現時点でシリアライゼーション/デシリアライゼーションの使用方法を学ぼうとしています。テストするために、3D シーンのオブジェクトを .xml ファイルにシリアル化しました (結局、実際に出力を読み取れると理解しやすくなります)。シリアライズは問題なく動作し、デシリアライズも問題ないようです。オブジェクトを再作成したい場合、最初のオブジェクトに問題なくアクセスできます...しかし、残りを取得するにはどうすればよいですか?
.cpp でのシリアル化 (省略):
これは機能し、次のような testdata.xml を作成します。
等
今使っているときは
逆シリアル化するには、コンパイルして実行し、最初のデータセット (ID、頂点、三角形、最初の まで) に</cereal>
アクセスできます。
あからさまに明らかな何かを見落としていて、それをじっと見つめている間に何かを見落としている可能性は十分にあります。しかし、この方法でデータをシリアル化することが健全なアプローチであるかどうかもわかりません。
c++ - シリアルシリアル化エラー
だから私は合法的に混乱しています。外部シリアライゼーション関数用にコンパイルされません。エラーが発生します
シリアルは、指定されたタイプとアーカイブの組み合わせの出力シリアル化関数を見つけることができませんでした。
したがって、以下のコードはコンパイルされません
しかし、これはコンパイルします
保存コードを glm::vec3 から何かに文字通りコピーして貼り付け、glm::vec3 を「何か」に変更しました。なぜそれが一方では機能し、他方では機能しないのか、私には意味がありません。名前空間の問題かもしれないと思いますが、それを修正する方法がわかりません。
c++ - シリアル内の rapidjson を含む文字列の null 値を受け入れ、それらを "" にします
JSON を C++ クラスに逆シリアル化するために、RapidJSON を使用する Cereal を使用しています。予想どおり、c++ std::string は null 値を持つことはできません。しかし、他のプラットフォームは文字列 (.NET SQL など) に対して null をサポートしており、文字列に対して null 値を持つ JSON を取得します。これを許容する必要があり、null の空の文字列を作成するだけです。それを行う最善の方法は何ですか?
次のように null を "" に変更する JSON の文字列置換をデフォルトに設定していますが、これはクリーンなソリューションではありません。
Cereal によって生成された例外に基づいて誰かがこの回答を探している場合、それは次のとおりです: "rapidjson internal assertion failure: IsString()"
c++11 - 穀物が XML 属性をロードまたは保存する方法
シリアルを使用して XML ファイルを保存/ロードしようとしていますが、XML 属性を保存/ロードする方法がわかりません。例えば:
私はXMLファイルを持っています:
と構造体
シリアルを使用して XML 属性値をロード/保存するシリアル化関数を定義するにはどうすればよいですか?
c++ - C++/Cereal: JSON から独自のクラスへの逆シリアル化中に例外が発生する
VS2013 でシリアル (v1.12) を使用して、JSON ファイルから自分のパラメーター クラスにパラメーターを読み込もうとしています。
コンパイルと POD へのロードは正常に機能しますが、自分のクラスへのロードはcereal::RapidJSONException
.
これが私のコードです:
JSON ファイル:
コール スタックをたどると、RapidJSON 内の document.h:244 が例外をスローすることがわかります。
しかし、私はそれをどうするかわかりません。コードを機能させるにはどうすればよいですか?
どうもありがとう!
解決策で更新:
ChrisBFX が書いたように、C++ オブジェクトを JSON スカラーに逆シリアル化するには、load_minimal/save_minimal を実装する必要があります。
一方、load/save は、JSON オブジェクトとの間で C++ オブジェクトをシリアライズします。
私のコードでは、load() 関数を削除して、次のように置き換える必要があります。
今では魅力のように機能します!:-)
c++ - Cereal 1.2.0 - JSON または XML アーカイブを使用した「ルーザー スロー指定子」エラー
Cereal 1.2.0 (1.1.2 から移動) に移行したばかりで、JSONOutputArchive または XMLOutputArchive (つまり、「cereal/archives/json.hpp」または「cereal/archives/xml.hpp」のいずれかを含む) を使用すると、コンパイル エラーが発生します。 )
正確なエラーは次のとおりです。
-std=c++11
gcc バージョン 4.7.3を使用してコンパイルします
が必要なstd::string
ので、バイナリまたはポータブル バイナリ アーカイブに移動できません。
Cereal 1.2.0 を使用してこのエラーを経験した人はいますか?
私は何かを見逃していましたか (ヘッダーがコンパイルさえしないようなものをリリースしたとは信じられません) ?
ありがとう !
c++11 - Cereal: PIMPL イディオムの実装構造体を管理する方法
cereal
PIMPL イディオムの使用に問題があります。
これは最小限の例です:
bh
b.cpp
main.cpp
そして、最小限の例をコンパイルしようとしたときに MSVC 2015 Community Edition で発生するエラーは次のとおりです。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits(428): エラー C2139: 'BImpl': 未定義のクラスは、コンパイラの組み込み型特性 '__is_polymorphic' の引数として許可されていません
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits(435): エラー C2139: 'BImpl': 未定義のクラスは、コンパイラの組み込み型特性 '__is_abstract' の引数として許可されていません
これを試みたのは私が初めてではないことは確かですが、ドキュメントやコード スニペットで具体的な解決策を見つけることができませんでした。
c++ - シリアル バイナリ アーカイブのシリアル化/逆シリアル化
次のコードを使用して、オブジェクトをバイナリ データとしてシリアル化/逆シリアル化しようとしています。
コードを実行すると、例外がキャッチされ、次のメッセージが表示されます。
"Failed to read 8 bytes from input stream! Read 0"
何が問題なのかを理解するのを手伝ってくれる人はいますか?