2011-04-18 4 views
2

을 사용하여 한 구성 요소에서 다른 구성 요소로 전송할 데이터 멤버를 serialize합니다. 문서에서는 클래스 버전 메커니즘을 unserialize both older and newer versions of a class에 사용하는 방법에 대해 설명합니다.부스트 직렬화 : 런타임에 버전을 선택하는 방법?

사용 사례가 약간 다릅니다. 어떤 경우에는 최신 버전의 코드가 객체를 이전 버전으로 전송합니다. 이전 버전에는 새 정의가 없으므로 새 버전을 읽는 데 해당 메커니즘을 사용할 수 없습니다. 대신 Boost 클래스 버전을 프로그래밍 방식으로 설정하고 이전 클라이언트에 연결할 때 이전 버전의 클래스를 생성하고 싶습니다. 문제는 버전이 정적 const로 컴파일 타임에 설정되어있는 것으로 보입니다.

Boost에서 제공하는 도구로이를 수행 할 수 있습니까? 또는 클래스의 각 인스턴스에 고유 한 버전 정보를 추가해야합니까?

답변

2

Boost.Serialization에서 사용하는 유형 버전에 동적으로 영향을 미치는 방법은 컴파일 시간 상수이므로 (언급 한대로) 이 특별한 경우를 처리하기 위해 고유 한 버전 관리 체계를 추가해야합니다.

0

당신이 말하는 것은 앞으로 (또는 위쪽) 호환성입니다. 비록 당신이하는 모든 일이 새로운 클래스 멤버를 추가하는 것이라해도 표준 부스트 아카이브를 사용하여 순방향 호환성을 얻을 수는 없습니다.

새로운 알 수없는 필드를 건너 뛸 부스트 XML 아카이브 용 patch이 있습니다. 이 방법을 사용하면 새 클래스 멤버를 추가 할 때 호환성을 얻을 수 있습니다.

또 하나는 3rdparty ptree archive입니다. json으로 작성할 수있는 :: property_tree :: ptree 데이터를 저장합니다. 로드 할 때 알 수없는 새로운 필드를 무시합니다.

Protocol Buffers