2012-05-16 2 views
3

나는 이전에 어떻게 만드는 "버전"나는 내가 원하는 어떤 일을 할 수 있었다 boost::serialization::accessboost :: serialization :: access 동적으로 버전을 런타임에/프로그램 적으로 변경할 수 있습니까?

사용 serializaion에 대한 this question을 요청하지만, 상당한 한계가있을 것으로 보인다.

특히, 런타임에 버전을 변경하고 코드에서 동적으로 직렬화 버전을 변경할 수 있기를 바랍니다. 그러나

, 매크로

BOOST_CLASS_VERSION(ClassName, ver) 

행동의 유형을 허용하지 않는 것 같다.

나는 각각 다른 클래스를 만들고 필요할 때 사용할 수 있다고 생각하지만, 많은 코드 변경이 필요하기 때문에 그러지 않는 것이 좋습니다.

동일한 실행 중에 다른 버전을 사용하도록 프로그래밍 방식으로 클래스를 변경하는 방법이 있습니까?

우리가해야 할 일의 조금 더 설명 :

내가 작업하려고 유스 케이스는 (은 업그레이드 된 첫 번째 실행/경우), 다음으로 쓰기 이전 버전의 프로그램 읽기입니다 새 버전을 읽은 다음 해당 새 버전을 읽을 수도 있습니다.

+0

[예제] (http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/tutorial.html#versioning) (참조 된 질문에서 제공)를 보았습니까? 새 필드를로드하기 전에 버전을 확인하면서 bus_route 클래스의 예제를 제공합니다. [데모] (http://www.boost.org/doc/libs/1_49_0/libs/serialization/example/demo.cpp)는 동일한 것을 보여줍니다 – Hasturkun

+0

@Hasturkun 예,하지만 다른 버전은 허용하지 않습니다. 같은 실행. – Tim

답변

1

디자인은 버전을 동적으로 변경하지 않는 것으로 보입니다. 이전 데이터의 읽기를 지원하는 것은 직렬화, 저장 , 또는 부하 기능에 버전 매개 변수를 통해 그러나 가능하다. 즉,로드 기능에서 버전을 확인하고 특정 부품을 다르게로드해야하는지 확인할 수 있습니다. 따라서 오래된 데이터를로드하는 것이 가능하지만 한 세트의 직렬화 함수 내에서 수행되어야합니다.

+0

실행하는 동안 해당 매개 변수를 변경하는 방법을 이해하지 못합니다. 컴파일시에 정적으로 설정하는 방법 만 볼 수 있습니다. 이 작업을 수행하는 방법에 대한 예가 있습니까? – Tim

+3

이전 데이터를 읽을 때 함수에 전달 된 버전 번호는 정적 파일이 아닌 파일에 저장됩니다. –

관련 문제