Cod*_*lse 6 c++ serialization boost export derived
我已阅读了大量类似问题,但未找到答案.我正在使用Visual Studio 2010并提升1.47.
这是代码,它是完整的和可编译的:
#include "stdafx.h"
#include <string>
#include <sstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/export.hpp>
using namespace std;
class BaseObject
{
public:
BaseObject(void) { };
virtual ~BaseObject(void) { };
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{ /* nothing happens here */ };
};
class DerivedObject : public BaseObject
{
public:
string text;
public:
DerivedObject(void) { };
~DerivedObject(void) { };
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & text;
};
};
BOOST_CLASS_EXPORT(DerivedObject)
int _tmain(int argc, _TCHAR* argv[])
{
DerivedObject der;
der.text = "Testing!";
std::ostringstream os;
boost::archive::text_oarchive oa(os);
oa.register_type<DerivedObject>();
// I made a DerivedObject, but I'm casting it to a BaseObject
// as the serialization code should not have to know what type it is
BaseObject *base = &der;
// now serialize it
oa << *base;
printf("serialized: %s\r\n",os.str().c_str());
return (0);
}
Run Code Online (Sandbox Code Playgroud)
你可以看到它真的很简单,我已经添加了BOOST_CLASS_EXPORT和oa.register_type魔法,它应该确保DerivdObject :: serialize()被调用,即使它不是虚方法..但仍然只有serialize()in调用BaseObject.也许是Visual C++特有的问题?请指教?
正如boost 序列化文档中所述,您需要告诉派生类调用基类序列化代码。只需编写您的派生类序列化方法,如下所示:
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & boost::serialization::base_object<BaseObject>(*this);
ar & text;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |