ブーストシリアライザーを使用して保存およびロードするデータクラスがあります。
クラスには、システムで既に作成されている 2 つのオブジェクトへの 2つのメンバーEn *sender
が含まれています。En *receiver
それらを再度作成する必要はありません。address
もう一方の端で参照として使用されるように、それらを送信(シリアル化)する必要があります。
, のような通常のポインターを使用する En *sender
とEn *receiver
、ブーストはオブジェクト全体をシリアル化します (これは望ましくありません)。
したがって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 ‘->’ ?)