新:我可以从 access.hpp 中使用它吗?
template<class Archive, class T>
inline void serialize_adl(Archive &, T &, const unsigned int);
这表明我可以定义一个将对象作为参数的不同序列化。
因此,下面的代码更改会起作用吗?
我想我的问题是如何在接口类上添加一个序列化方法,它将调用派生子类的序列化方法。
class Interface {
public:
virtual void aVirtual() = 0;
private:
friend class boost::serialization::access;
template<class Archive, class T>
void serialize_adl(Archive & ar, T & object, const unsigned int version)
{
// Would this work?????
ar & object;
}
};
template<class T>
class Derived : Interface {
public:
Derived(T in) : m_data(in) {}
virtual void aVirtual() { // Do something }
private:
T m_data;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & m_data;
}
};
我目前从我的编译器收到以下错误:
error C2039: 'serialize' : is not a member of 'Interface'
这是不寻常的,因为对象在智能指针内,所以它应该知道它是什么类型:
std::unique_ptr<Interface> object = std::unique_ptr<Interface>(new Derived<int>(5));
因此,当我尝试序列化时:
archive >> *object;
因此我得到了错误。