<分区>
Possible Duplicate:
Boost Serialization using polymorphic archives
我正在尝试使用指向派生类的基指针来序列化我的类,但这只会序列化基类。
我刚刚读了http://www.boost.org/doc/libs/1_32_0/libs/serialization/doc/special.html#registration , 但导出宏和注册函数似乎都没有改变任何东西。
考虑以下非常基本的类层次结构:
#include <iostream>
#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
class A
{
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
std::cout << "A!\n";
}
};
class B : public A
{
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & boost::serialization::base_object<A>(*this);
std::cout << "B!\n";
}
};
int main()
{
std::ofstream of("mybin.bin");
boost::archive::binary_oarchive oa(of);
A* b = new B();
oa << b;
delete b;
return 0;
}
输出将是:
A!
显然,我正在寻找的输出是 A!乙!有什么办法可以实现吗?
编辑:好的,在查看评论中的相关条目后,这就是正在发生的事情。
有 3 件事要改变:
- A 类应该有一个虚函数,这样它才被认为是多态的
- 需要导出派生类。 BOOST_CLASS_EXPORT(B)
- oa << b 而不是 oa << *b
它与标准的 binary_oarchive 以及 polymorphic_binary_oarchive 一起工作。
EDIT2:当我说 b.cpp(.h) 和 main.cpp 时,BOOST_CLASS_EXPORT 会导致重复的符号:
重复符号 boost::archive::detail::extra_detail::init_guid::g