У меня есть класс данных, который нужно сохранить и загрузить с помощью бустера serializer.Сериализовать указатель сам не целевой объект
В класс входят два члена 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 ‘->’ ?)
Что такое «другой конец»? Указатель действителен только в вашей программе. –
Привет, да, другой конец - это моя программа. (Рассказ: Я использую сериализацию для отправки/получения данных между агентами в нашем симуляторе. Эта передача/получение должна следовать моделях неопределенности беспроводной сети, таких как задержка, потеря и т. Д. Поэтому я сериализую пакеты отправляют информацию получателя отправителя в пакет, затем отправляют пакеты на другой симулятор, записывая файл [отправить файл]. Второй симулятор читает этот файл и не заботится о содержимом пакета. Он просто записывает содержимое в другой файл [получить файл] после задержки (или не отправить его вообще, чтобы походить на «потерю»). Первый симулятор читает .... – rahman
считывает файл приема, десериализует и, согласно информации получателя, доставляет информацию на входящий буфер приемника). Здесь мне просто нужна информация о получателе, чтобы быть только адресом получающего объекта ... остальное понятно (я думаю) – rahman