問題タブ [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::function をシリアライズして message_queue に送信する方法
boost::interprocess::message_queue で共有したいので、boost::serialize を使用して実際に boost::function をシリアル化しようとしています。それを行う方法は 1 つしかありません。非侵入型の boost::serialize を使用することです。
また、vtable と functor をシリアル化する必要があります。試していません。動作しているかどうかはわかりません。
boost::function を適切な方法でシリアル化する方法はありますか?
ありがとうございました。
c# - C ++およびC#でのバイナリシリアル化/逆シリアル化
私は2つのコンポーネントを持つ分散アプリケーションに取り組んでいます。1つは標準のC++(マネージC ++ではなくLinuxプラットフォームで実行)で記述されており、もう1つはC#で記述されています。どちらもメッセージバスを介して通信しています。
オブジェクトをC++からC#アプリケーションに渡す必要がある状況があります。このために、これらのオブジェクトをC ++でシリアル化し、C#で逆シリアル化する必要があります(.NETでのマーシャリング/アンマーシャリングなど)。このシリアル化は、XMLではなくバイナリで実行する必要があります(パフォーマンス上の理由から)。
Boost.Serialization
両端がC++で実装されていたときにこれを行っていましたが、一方の端に.NETアプリケーションがBoost.Serialization
あるので、実行可能なソリューションではありません。
C ++と.NETの境界を越えて(逆)シリアル化を実行できるソリューション、つまりクロスプラットフォームのバイナリシリアル化を探しています。
(逆)シリアル化コードをC ++ dllに実装P/Invoke
し、.NETアプリケーションで使用できることはわかっていますが、最後の手段としてそれを維持したいと思います。
また、gzipのような標準を使用しているかどうかを知りたいのですが、それは効率的ですか?gzipに代わるものは他にありますか?それらの長所/短所は何ですか?
ありがとう
c++ - 解析ポインターであるアーカイブを作成するにはどうすればよいですか?
boost::archive::xml_oachive のようなカスタム アーカイブを作成することを計画しており、boost/libs/serialization/example フォルダーに良い例が見つかりました。
次のコードを参照してください(上記のディレクトリにあります):
同様に、カスタム アーカイブを作成しました。しかし、私のコードと上記のコードは、ベースポインターを派生ポインターに自動キャストしません。例えば、
私たちを手伝ってくれますか?ベースポインタから派生ポインタを取得するにはどうすればよいですか?
c++ - Boostを使用してCStringをシリアル化する方法
私はboost::serializationを使用して、シリアル化のための独自のメソッドを実装しているが、それほど良くない既存のプロジェクトの一部を置き換えようとしています。ただし、アプリケーションがMFCを使用しているため、いくつかの問題が発生しています。次のようにCStringをシリアル化しようとしました
しかし、私はいくつかのエラーが発生しています
boost_1_45_0 \ boost \ serialization \ access.hpp(118):エラーC2039:'serialize':'ATL::CStringT'のメンバーではありません
access.hppには
したがって、CStringにはMFCによるシリアル化があると思います。
今、私は疑問に思っています、私は何ができますか?回避策はありますか?CStringsがstd:stringに再定義されるのを避けようとしています。これは、CStringsが非常に多く、プロジェクト全体をやり直すことを意味するためです。
また、CArrayをシリアル化したいのですが、同じタイプのエラーが発生します。シリアル化はCArrayのメンバーではありません。
編集: CStringの問題は追加することで修正されます
マクロが機能しない理由がわかりません。しかし、私はまだCArrayの問題に直面しています。簡単な解決策を試しました
しかし、それはXMLを作成しません。そして、私はこのように配列を反復しようとしました
しかし、それはクラスのシリアル化を呼び出しているのではありません。Boostの例でstd::vectorやstd::listのような配列をシリアル化する簡単な方法はありますか?
c++ - ユーザー提供の派生型を Boost Serialization に登録する
ユーザー定義型の格納とシリアル化を処理するライブラリを作成しています。ユーザー定義型は、それ自体がシリアライズ可能である必要があります。
ただし、ライブラリはテンプレートを使用してユーザー タイプのコンテナーを作成します。テンプレートを使用してコンテナ タイプを boost::serialization にエクスポートする方法がわかりません。私ができる唯一の方法は、ライブラリのユーザーにすべてのコンテナー タイプの BOOST_CLASS_EXPORT_GUID() を強制することです。
boost/serialization/export.hpp を見てマクロを解凍しようとしましたが、少し複雑です... テンプレートのインスタンス化の一部としてクラスをエクスポートする方法はありますか? または、ユーザー定義型のコンテナーを簡単にシリアル化するライブラリを作成する別の方法はありますか?
c++ - シリアル化の強化:警告を無視しても安全ですか?
Boostのシリアル化コードを使用してデータをバイナリストリームに書き込み始めました。無効にできる次の警告が表示されます(D_SCL_SECURE_NO_WARNINGS
)が、安全かどうか疑問に思います。どのコードが警告を引き起こしているのか、より具体的な情報を取得するにはどうすればよいですか?私は.cppファイルしか知りません。
これは、VisualStudio2008からの出力です。
ありがとう!
c++ - テンプレート クラスの非侵入型シリアライズ メソッド
私はブーストシリアライゼーションを使用していますが、ほとんどが侵入型です。テンプレート Matrix クラスの場合、次のコードを使用して Visual Studio で動作する非侵入型バージョンが必要です。
int R
、int C
は行と列、またはElementType
です。double
float
ただし、これは GCC 4.3.2 では機能せず、エラーが発生します。
次のような特別なフォームを使用する場合
GCC でコンパイルされますが、もちろん、特別なテンプレート引数のセットに対してのみです。
R
すべての、C
およびの両方のコンパイラで動作させるにはどうすればよいElementType
ですか?
編集:これらはエラーの原因となっている行です:
c++ - C++ ネットワークのシリアル化
C++ パケットをネットワーク ストリームにシリアル化するためのソリューションを探しています。
ここで人々に言及する多くの投稿を見てきました:
エース
Google プロトコル バッファ
Boost::シリアル化
Qt ::QDataStream
私の要件/制約:
ソリューションは、LitteEndian/BigEndian を認識しない必要があります。マシン アーキテクチャ x86/x64 およびプラットフォームに依存しません。
最初の 3 つのソリューションのフット プリント (RAM と ROM) は、私のプラットフォームには大きすぎます。4 番目のソリューションは、次の要件と矛盾しています。
このソリューションでは、大量のボイラープレート コードは必要ありません (シリアル化する必要がある 200 以上のパケットがあります)。
ありがとう、コビー・メイア
c++ - Boost.MPI に、Boost.Serialization で使用するクラス バージョンを指定できますか?
プロセス間でメッセージを交換するために Boost.MPI を使用しています。各メッセージは、Boost.Serialization を使用してシリアル化されたクラスの 1 つを運びます。また、同じシリアライゼーション コードを使用して、そのクラスをファイルに保存します。MPI 経由で送信する必要があるものは、ファイルに保存する必要があるものよりも小さい (関連するメンバーが少ない)。シリアライゼーション ライブラリでサポートされているクラスのバージョン管理を使用して、Boost.MPI にデフォルト以外のバージョンのクラスを送信するように指示するとよいと考えていましたが、そうする方法が見つからないようです。これが可能かどうか知っていますか?
c++ - シリアライゼーションの促進: 実行時にバージョンを選択する方法は?
Boost Serializationを使用して、あるコンポーネントから別のコンポーネントに転送するためにデータ メンバーをシリアル化しています。このドキュメントでは、クラス バージョン メカニズムを使用して、クラス の古いバージョンと新しいバージョンの両方をシリアル化解除する方法について説明しています。
私のユースケースは少し異なります。場合によっては、コードの新しいバージョンがオブジェクトを古いバージョンに送信します。古いバージョンには新しい定義がないため、そのメカニズムを使用して新しいバージョンを読み取ることはできません。代わりに、プログラムで Boost クラスのバージョンを元に戻し、古いクライアントに接続したときに古いバージョンのクラスを生成したいと考えています。問題は、バージョンがコンパイル時に static const として設定されているように見えることです。
Boost が提供するツールを使用してこれを実現できますか?それとも、クラスの各インスタンスに独自のバージョン情報を追加する必要がありますか?