부스트 직렬화에 약간의 문제가 있습니다. BOOST_CLASS_EXPORT 및 BOOST_CLASS_EXPORT_IMPLEMENT를 사용하여 기본 클래스 포인터를 통해 파생 클래스 포인터를 직렬화하는 방법을 보여주는 많은 예제가 있습니다. 이것은 잘 작동하고 전혀 문제가 없습니다.역 참조 기본 클래스 포인터를 통한 부스트 직렬화
그러나 반대쪽의 직렬화를 다시 포인터로 가져와 부스트하면 직렬화 된 개체의 새 인스턴스가 만들어지기 때문에 포인터를 직렬화하고 싶지 않습니다.
역 참조 된 포인터를 직렬화 한 다음 문제없이 기존 개체 인스턴스에 대해 다시 deserialize 할 수 있으며 새 인스턴스가 만들어지지 않습니다. 그러나 역 참조 된 포인터가 기본 클래스 위에있을 때 포인터를 통해 직렬화 할 때 파생 클래스는 예상대로 직렬화되지 않습니다.
근무 예 :
Class A;
Class B : public A;
A* baseClass = new B();
ar << baseClass // works perfectly
작동하지 예 :
Class A;
Class B : public A;
A* baseClass = new B();
ar << *baseClass; // only A is serialized
내가 같은 파생 클래스를 통해 간단한 일련의 순차적으로 작업을 얻을 수 있습니다 :
B* derivedClass = new B();
ar << *derivedClass; // works fine
그러나 모든 참조 내 구조에는 기본 클래스 유형이 있습니다. 또한 deserializing 할 때 새 객체를 인스턴스화 할 필요가 없으므로 포인터를 직렬화 할 수 없으며 기존 인스턴스 위에 내용을 "덮어 씁니다".
포인터를 직렬화하고 기존 인스턴스를 역 직렬화하려고 시도했지만 올바르게 작동하지 않습니다. 나는 기존의 인스턴스를 통해 직렬화 말할 때, 내 말은 :
A* baseClass = new B();
// baseClass is used in the program and in a given moment, its contents must be overwrite, so:
ar >> *baseClass;
내가 말했듯이 직렬화 복원 할 때, 나는 BaseClass로의 새로운 인스턴스를 필요가 없습니다. 그래서,이 방법을 사용할 수있는 방법이 있습니까?
안녕하세요, 조금 늦었습니다.하지만 방금이 질문을 발견했습니다. 나는 똑같은 문제에 직면하고있다. 나는이 문제가 참조로 해결 될 수 있다고 생각했지만, 기본 클래스에 대한 참조를 통해 직렬화하는 것은 나를 위해 작동하지 않는다. 이 문제를 해결할 수 있습니까? – TomasG
@TomasG 님이 지적한 해결책을 마침내 사용했습니다. 기본적으로 직렬화 및 직렬화 desalialize 가상 함수를이 방식으로 직렬화 할 클래스에 추가 구성됩니다. 다행히도 그들은 거의 없습니다. –
답변을 주셔서 감사합니다, 동정 거기에 더 우아한 솔루션입니다. – TomasG