問題タブ [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++ - シリアルでboost::uuidをシリアル化する方法
この単純なクラスをシリアル化しようとしています:
しかし、私はこのエラーメッセージを受け取ります
uuid へのポイティング。これを有効にするブーストシリアル化の方法は、追加することです
しかし、これはそのままではシリアルには機能しません。穀物の文書によると
シリアル アーカイブは std::ostream または std::istream オブジェクトのいずれかで動作します。
だから私は定義されているが運がないヘッダーを追加しようとしました
c++ - C++ Cereal: C スタイルの配列をシリアライズする
シリアルライブラリを使用して配列をシリアル化できますか、またはどのようにシリアル化しますか。
いえ
それは機能しません (また、私もそれを期待しません)。そうでもない
(使用するブーストコードのように見えるので、これはうまくいくと思います)、コンパイルエラーが発生します:
/usr/local/include/cereal/cereal.hpp:79:17: 注: 候補テンプレートは無視されました: 置換エラー: 可変的に変更された型 'unsigned char (&)[l]' はテンプレート引数として使用できません BinaryData binary_data( T && data, size_t size )
そうでもない
そのメソッドは XML/Json でのみサポートされているように見えるため、バイナリ アーカイブが必要です。
c++ - 穀物のシリアライゼーションとポリモーフィズム
わかりましたので、シリアルを使用してC++ 11で問題が発生しています( http://uscilab.github.io/cereal/ )。
抽象的な意味で、エッジと頂点を接続する多くの共有ポインターでシリアル化する大きなグラフがあります。エッジ (および頂点) にもアトリビュートが関連付けられています。
現在、これらの属性 (基本クラス) の 1 つがアカウント (子クラス) です。Account もシリアル化可能な Idable から継承します。ここで、私の穀物の使用法を示すいくつかの関連するコードの抜粋を示します。このコンテキストの後で問題を説明します。
属性.hpp/cpp
Idable.hpp/cpp
位置.hpp/cpp
Account.hpp/cpp
したがって、mfin::Account がシリアル化されているときに問題が発生します。mfin::Account は std::list> に属します。Idable のシリアル化関数に取り掛かると、オブジェクトは無効です。
segfault で停止する gdb に入ると、いくつかのスタックフレームをこの行に移動します: /usr/include/cereal/types/polymorphic.hpp:341。それは次のとおりです。
ここで、これが ptr です。
すべてが良さそうです。ただし、void* にキャストするときに注意してください。
これはもちろん、const void* を取る binding->second.shared_ptr (以下を参照) で起こることです。
これを引き起こす穀物の使用法で何が間違っていますか? これが私が得る最終的なエラーです:
c++ - 穀物の JSON 出力で右中括弧が欠落している
私はCereal C++ v1.1.1を使用しており、ドキュメントに記載されている例と同様に、次のことを試みています:
私は次のことを期待しています:
しかし、閉じ中括弧がありません。コードに何が欠けているか分かりますか?
アップデート:
追加archive.finishNode()
すると問題が解決するようです。しかし、それは解決策ではないと言いたい。ドキュメントによるとoperator()
、オペレーターを呼び出すと入力パラメーターがシリアル化されますが、なぜ追加する必要があるのfinishNode
ですか?
c++ - Boost シリアライゼーションは、32 ビット マシンと 64 ビット マシンの間では機能しません。他のシリアル化/圧縮ライブラリはありますか?
ブースト ライブラリを使用して、64 ビット マシンでシリアル化し、32 ビット マシンで逆シリアル化しようとしています。しかし、うまくいかないようです。(私は1.57.0を使用しています)。
次のコードを実行すると
32 ビット マシンの出力は37で、64 ビット マシンの出力は41です。
私が使用できる他の良いシリアライズライブラリはありますか? シリアルはいかがですか?
ライブラリが圧縮 (zlib/gzip など) も行うことができれば素晴らしいことです。
c++ - 関数はC++で値によって渡されたパラメータをどのように変更できますか?
基本的に、これはセマンティクスに関する質問です。私は C++ でのシリアル化 (デ) に Cereal ライブラリを使用していますが、そのコーディング スタイルが興味深いものであることがわかりました。
トリッキーな部分は、参照によって「out」を渡さず、ar() がその値を変更できることです。実際、作成者は演算子「()」をオーバーライドしているだけです。そして、ソースファイルに対応する行が見つかりました。
特に最初の行(「= delete」)と「std::forward(args)...」に関することです。va_arg のようなマクロが使用されているケースをいくつか見ただけで、このようなものに遭遇したのは初めてです。また、「&&」は何の略ですか?誰かがそれに光を当てることができますか?
c++ - シリアル インポート用のファイルを手動で作成する方法
(json)ファイルmanuyll(pythonを使用)を作成し、それを穀物と一緒にC ++アプリケーションにロードしたいと思います。
セラルを使用した保存と読み込みは正常に機能します。ただし、json ファイルの polymorphic_ids は明確ではありません。
より明確な例を次に示します。これは、シリアル フレームワークによって生成されるオブジェクトです。
```
番号の生成を観察すると、最初の ID が増加しています。2 番目の配列は、最初の ID をポリモーフィック ID として使用し、さらに数値を増やします。
では、これらの数字が使用された理由は何かあるのでしょうか? それらを常に使用するだけで保存できますか、それとも別のマシンで c++ インポーターを実行するとこれらが変更されますか?
c++ - 仮想継承を使用したポリモーフィック クラスの Cereal によるシリアル化
Cereal 1.1.2 を使用して (仮想継承を使用して) ポリモーフィック クラスをシリアル化および逆シリアル化しようとしています。「アクセス違反 - RTTI データがありません!」というメッセージが表示されます。逆シリアル化した後に派生クラスにダウンキャストしようとすると例外が発生します。仮想継承の代わりに通常の継承を使用すると、正常に機能します。Visual Studio 2013 Community Edition のプロジェクト設定で RTTI (/GR) を既に有効にしています。これが私のコードです:
c++ - シリアル化: 最初の変数のみを読み取る
シリアル lib を使用して一部のデータをシリアル化しています。、 、の間float
でいくつかの変数をシリアル化しています。double
std::vector
私はそれを次のように書きます
読み返すことはできます_pts_size
か_num_cams
?