序列化指针本身而不是目标对象
serialize pointer itself not the target object
我有一个数据类要保存并使用boost序列化器加载。
类包含两个成员En *sender
, En *receiver
到我的系统中已经创建的两个对象。我不需要它们再被创造出来。我只需要发送(序列化)他们的address
,作为另一端的参考。
如果我使用普通指针,如En *sender
, En *receiver
, boost将序列化整个对象(这是我不想要的)。
所以我想我应该使用En **sender
, En **receiver
产生错误。我可以知道我应该如何修改课程以达到我的目的吗?
非常感谢。
class dataMessage
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & sender;
ar & receiver;
}
//I figured I should user pointer to pointer coz in case of the normal pointer,
//the serilizer would serializes the object that the pointer is pointing to;
//whereas I just need to save the 'pointer' to object so that we
//can use it as a reference at the other end.
En **sender;
En **receiver;
public:
dataMessage(){
sender = receiver = 0;
}
void setDataClassType();
virtual void registerType(boost::archive::text_oarchive &oa)
{
oa.register_type(static_cast<dataMessage *>(NULL));
}
virtual void registerType(boost::archive::text_iarchive &ia)
{
ia.register_type(static_cast<dataMessage *>(NULL));
}
};
部分错误:
error: request for member ‘serialize’ in ‘t’, which is of pointer type ‘En*’ (maybe you meant to use ‘->’ ?)
似乎没有办法比手动存储地址,否则boostserializer将序列化目标对象。所以我将发送方和接收方的类型修改为:
class dataMessage
{
//......
public:
//.....
//a proper size of integer is used coz in case of the normal pointer,
//the serilizer serializes the object that the pointer is pointing to
//whereas we just need to save the 'pointer' to object so that we
//can use it as a reference at the other end. so instead of storing 'sim_mob::Entity *'
//we store:
#if __x86_64__ //64 bit
unsigned long sender;
unsigned long receiver;
#else //32 bit
unsigned int sender;
unsigned int receiver;
#endif
dataMessage(){
sender = receiver = 0;
}
//...
};
以后使用指针时,我将简单地转换为适当的指针类型。
相关文章:
- 对象指针在c++中是如何工作的
- C++ 对象指针数组的复制构造函数
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 正确初始化和销毁对象指针的C++数组?
- 如何深度复制链表对象指针
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 对象指针 c++ 的全局向量错误
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 静态对象指针
- 正在将对象指针数组初始化为NULL
- 如何使用条件表达式返回对象指针?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 如果目标对象死亡,Qt::BlockingQueuedConnection发射会发生什么
- 使用C对象指针构建PyObject*
- 如何在使用对象指针时访问成员函数
- 静态强制转换允许转换对象指针,但不允许转换整数
- C++ abort() 在函数内的抽象类对象指针调用上
- 指向函数的对象指针
- 序列化指针本身而不是目标对象