いくつかのメッセージ構造体があります。それぞれを文字列にシリアライズしたり、文字列からデシリアライズしたりできます。シリアル化の部分では、オーバーロード演算子 << を使用します。しかし、逆シリアル化の部分については、適切な方法が思いつきません。そのため、クラスを使用して文字列を解析します。最近、ブーストの連載に出会いました。それがこの目的に役立つかどうか、またはより良いアイデアがあるかどうかはわかりません。
struct S
{
int32_t type;
double a;
int32_t b;
bool c;
std::string d;
friend std::ostream& operator<< (std::ostream& os, const S& s)
{
os << "{field1" << "=" << s.a << "|";
os << "field2" << "=" << s.b << "|";
os << "field3" << "=" << s.c << "|";
os << "field4" << "=" << s.d << "}";
return os;
}
};
編集:だから、私は xml アーカイブを使用することを選択します。ただし、別の問題があります。フィールド msgtype によって分類されるメッセージにはいくつかのタイプがあるため。逆シリアル化するとき、どのオブジェクトに逆シリアル化するかを指定する方法は? msgtype フィールドを手動で検索する必要がありますか?
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
using boost::serialization::make_nvp;
ar & make_nvp("msgtype", type);
ar & make_nvp("field1", a);
ar & make_nvp("field2", b);
ar & make_nvp("field3", c);
ar & make_nvp("field4", d);
}