【发布时间】:2019-02-19 06:19:04
【问题描述】:
我正在尝试根据这些问题序列化我的抽象类:
- Get private data members for non intrusive boost serialization C++
- Error serializing an abstract class with boost
- Error serializing an abstract class with boost
我的neuron.h 看起来像这样:
class Neuron {
public:
struct access;
API virtual ~Neuron();
API virtual double activate( double x, double b ) = 0;
};
我必须将所有Boost 相关成员保留在neuron.cpp 中,以防止在其他代码中使用neuron.h 时包含Boost 标头。
我的neuron.cpp 看起来像这样:
#include "Neuron.h"
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
BOOST_SERIALIZATION_ASSUME_ABSTRACT(Neuron);
struct Neuron :: access {
template <class Archive>
static void serialize(Archive &ar, Neuron& n, const unsigned int version) {}
};
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive & ar, Neuron& n, const unsigned int version)
{
Neuron::access::serialize(ar, n, version);
}
} // namespace serialization
} // namespace boost
Neuron::~Neuron() {
}
问题是,当我在其他地方使用它的继承类时,我得到了错误
***/boost/boost/serialization/access.hpp:116:11: error: ‘class Neuron’ has no member named ‘serialize’
我在这里做错了什么?
【问题讨论】:
-
好吧,Neuron::access::serialize(ar, n, version);调用未实现的神经元的序列化。您必须精确指定 n 的序列化方式。
-
@Pi 所以,
serialize函数在access结构中实现。我试图关注第一个问题中给出的the example。 -
是的,但在示例中它说 `ar & BOOST_SERIALIZATION_NVP(a.m_id);` 这是序列化成员数据的具体方式。你没有对等的
-
@Pi 是的,但是我没有要在这个抽象类中序列化的成员(它目前只是一组方法) - 我正在实现它,以便继承的类可以调用它。
-
@Pi 或者你认为有什么特殊的方法可以创建一个空的序列化函数?
标签: c++ serialization boost abstract-class private-members