2012-10-24 4 views
1

In this link 부스트 직렬화 및 역 직렬화를 찾을 수 있습니다. 그러나 Deserialization 메서드에서는 deserialize 할 클래스의 특정 개체를 제공해야합니다. 예 : newg동적 유형으로 역 직렬화

gps_position newg; 
{ 
    // create and open an archive for input 
    std::ifstream ifs("filename"); 
    boost::archive::text_iarchive ia(ifs); 
    // read class state from archive 
    ia >> newg; 
    // archive and stream closed when destructors are called 
} 

C 이후 ++ C#에서 객체 같은 모든 기본 클래스가 나던, 내가 어떻게 공통의 객체로 역 직렬화하고 다음을 배역?

지금까지 아니요, 나는 사용자 정의 클래스 호출 객체를 만들 수 있었고 그 밖의 모든 클래스를 상속 받았지만이 경우에도 2 번 직렬화를 해제하는 상황이있었습니다. 이 문제에 대한 해결 방법이 있습니까?

답변

2

부스트. 직렬화에 구체적인 클래스가 제공되어야합니다. C++에는 가상 생성자가 없으므로 디시리얼라이저는 생성 할 객체를 알아야합니다. 공통 조상도 도움이되지 않습니다. 객체는 비 직렬화 전에 으로 만들어야합니다.

클래스 계층 구조를 serialize 및 deserialize하려는 경우 개체 직렬화시 및 deserialize 할 때 클래스 Id를 명시 적으로 작성해야합니다.이 ID를 명시 적으로 읽으면 결정할 개체 (만들고 개체를 deserialize 할 개체)를 명시 적으로 작성해야합니다.

+0

으로 설명되어 있지만 ID를 읽으려면 먼저 그것을 역 직렬화해야하고 그런 다음 다시 해당 유형으로 deserialize해야합니다. – Navin

+0

부스트 직렬화가 동적 객체 계층 구조로 작동하도록 설계되지 않았다고 생각합니다. 아마 내가 옳지 않아. – Lazin

+0

고마워요. .. 나는 그것을 들여다. .. – Navin

0

개체에 대한 포인터를 serialize/deserialize하면 기본 클래스로 deserialize 할 수 있습니다. 그런 다음 Boost가 자동으로 ID 등을 만듭니다. 메커니즘은 here