ホームSora neko ブロックチェーン開発→ADD_SERIALIZE_METHODSとは?

ADD_SERIALIZE_METHODSとは?

シリアライズおよびアンシリアライズの機構をクラスや構造体に組み込むマクロです。
READWRITEマクロを用いて上から順に並べていくだけです。
ところで、データベースに読み書きされるシリアライズ・アンシリアライズの場合には、注意点があります。
ただ……、どこでデータベースに処理されるのか、わからないため、基本、以下の注意は「厳守」です。
1:順番については「厳守」です。バイナリ配列に変換されるため、入れ替えるとデータが壊れます。
2:メンバの型についても、途中から変えるのは「厳禁」です。万一、サイズが変わると壊れます。
3:メンバを増やす場合に備える場合は、先頭にnVersionを加えておき、場合分けで対応します。

注意点

どの型であっても、コンパイラが自動的にコードを生成する訳ではございません。
新しい型を定義したら、serialize.hにシリアライズとアンシリアライズの方法を記述しなければなりません。
例:prevectorや、std::tupleで型の要素数を増やした場合(4つまでは定義済み)です。

サンプルコード


class test {
public:
	ADD_SERIALIZE_METHODS
	template <typename Stream, typename Operation>
	inline void SerializationOp(Stream &s, Operation ser_action) {
		READWRITE(n);
		READWRITE(str);
		READWRITE(v);
	}

	bool operator==(const test &obj) const {
		return n==obj.n && str==obj.str && v==obj.v;
	}
private:
	int n;
	std::string str;
	std::vector<std::string> v;
};

void test2 {
	test obj;
	obj.n=8;
	obj.str="mike";
	obj.v.emplace_back(std::string("neko"));

	CDataStream ssData;
	::Serialize(ssData, obj);

	test obj2;
	::Unserialize(ssData, obj2);

	assert(obj==obj2);
}

	
□ 本ページをご覧いただきました方は、以下のページもよくご覧いただいております。
■ 集計中.....