[解決済み] C++でオブジェクトをシリアライズするには?
2023-01-12 03:34:17
質問
オブジェクトの小さな階層があり、それをシリアライズしてソケット接続で送信する必要があります。 私は、オブジェクトをシリアライズし、それがどのような型であるかに基づいてそれをデシリアライズする必要があります。 C++ でこれを行う簡単な方法はありますか (Java にあるように)。
C++のシリアライゼーションオンラインコードサンプルやチュートリアルはありますか?
EDITです。 ちょうど明確にするために、私はオブジェクトをバイトの配列に変換し、オブジェクトに戻すためのメソッドを探しています。 私はソケット送信を処理することができます。
どのように解決するのですか?
シリアライズの話をすると ブーストシリアライゼーションAPI が思い浮かびます。シリアライズされたデータをネット上で転送する方法としては、Berkeleyソケットか asioライブラリ .
編集してください。
オブジェクトをバイト配列にシリアライズする場合は、以下の方法でboostシリアライザを使用します(チュートリアルサイトより抜粋)。
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
class gps_position
{
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & degrees;
ar & minutes;
ar & seconds;
}
int degrees;
int minutes;
float seconds;
public:
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};
実際のシリアライズは、その後、非常に簡単です。
#include <fstream>
std::ofstream ofs("filename.dat", std::ios::binary);
// create class instance
const gps_position g(35, 59, 24.567f);
// save data to archive
{
boost::archive::binary_oarchive oa(ofs);
// write class instance to archive
oa << g;
// archive and stream closed when destructors are called
}
デシリアライズは同様の方法で動作します。
ポインタのシリアライズ(トレスなどの複雑なデータ構造も問題ありません)、派生クラスのシリアライズ、バイナリやテキストのシリアライズを選択できるメカニズムも用意されています。さらに、すべてのSTLコンテナが箱から出してサポートされています。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] JavaScriptのオブジェクトを表示するにはどうすればよいですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] jQueryでフォームデータをJavaScriptオブジェクトに変換する
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む