void * 타입의 포인터를 가진 간단한 struct를 직렬화해야하지만, serialize 할 때 오류가 발생한다. "C2338 : boost :: serialization :: tracking_level < T> : : value! = boost :: serialization :: track_never "167 행의 shared_ptr.hpp을 가리 킵니다. 다음은 코드입니다void * 포인터 타입에 대한 부스트 직렬화가 컴파일되지 않는다
#include <boost/serialization/access.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/optional.hpp>
#include <boost/serialization/map.hpp>
#include <boost/serialization/shared_ptr.hpp>
struct Man
{
Man();
virtual ~Man();
std::list<boost::shared_ptr<void *>> condition;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & condition; // if i comment this line.. issue goes away..
}
};
struct SuperMan
{
public:
SuperMan(void);
SuperMan(const parameter_strings & parms);
virtual ~SuperMan(void);
boost::optional<anyURI> detail;
boost::optional<SuperManInfo> SuperMan_info;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & SuperMan_info;
ar & detail;
}
};
실제로는 부스트 *의 직렬화를 지원합니다.
실제 코드라고 가정합니다. 변수를 직렬화 할 수 있도록하려면 boost :: serialization에 실제로 'void *'가 가리키는 내용을 말해야합니다. 직렬화의 관점에서 보았을 때, 그것은 일반적인 포인터이며, 그것을 어떻게 처리해야하는지 전혀 모른다. 그것이 예일 경우 ('shared_ptr'이 끔찍한 아이디어이기 때문에) 희망이 있다면, 더 많은 정보가 필요합니다. –