일부 메시지 구조체가 있습니다. 각 문자열은 문자열로 직렬화되고 문자열에서 직렬화 해제 될 수 있습니다. 직렬화 부분의 경우 오버로드 연산자 < <을 사용합니다. 그러나 역 직렬화 부분에 대해서는 적절한 방법을 생각할 수 없습니다. 그래서 클래스를 사용하여 문자열을 파싱합니다. 최근에, 나는 부스트 직렬화를 발견했다. 이 목적을 달성 할 수 있는지, 아니면 더 좋은 아이디어가 있는지 나는 모른다.struct serialization
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 archive를 사용합니다. 그러나 나는 또 다른 문제가있다. msgtype 필드로 분류되는 여러 유형의 메시지가 있기 때문에. deserialization 할 때 deserialize 할 개체를 지정하는 방법은 무엇입니까? 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);
}
역 직렬화를 위해 무엇을 하시겠습니까? – 0x499602D2
문자열 "{field1 = 1 | field2 = 2 | field3 = 1 | field4 = abc}"가 주어지면 구조체로 deserialize 될 수 있습니다. –
은 사람이 읽을 수있는 "문자열"입니까? – Alex