Проблема с сериализацией Cereal shared_ptr - PullRequest
1 голос
/ 05 марта 2019

Я столкнулся с проблемой при сериализации общих указателей с Cereal. У меня есть следующий класс struture:

class Source
{
    std::string name;

    template<class Archive> void serialize(Archive & archive)
    {
        archive(name);
        std::cout << "SN: " << "(" << m_Name << ")";
    }
};

class Event
{
    std::shared_ptr<Source> source;

    const std::shared_ptr<Source>& getSource() const 
    {
       return source;
    }

    template<class Archive> void serialize(Archive & archive)
    {
        archive(source);
        std::clog << "EN: " << "(" << getSource()->getName() << ")" << "ENP: " << source.get() << std::endl;
}

};

Запустив мой основной код, я получаю следующий вывод:

SN: (l_32) EN: (l_32) ENP: 0x7f9f90001450

SN: (l_13) EN: (l_13) ENP: 0x7f9f90001b80

SN: (l_4) EN: (l_4) ENP: 0x7f9f90002100

SN: (l_58) EN: (l_58) ENP: 0x7f9f90002280

SN: (l_27) EN: (l_27) ENP: 0x7f9f90002340

SN: (l_81) EN: (l_81) ENP: 0x7f9f900028b0

SN: (l_65) EN: (l_65) ENP: 0x7f9f90002970

SN: (l_49) EN: (l_49) ENP: 0x7f9f90003140

SN: (l_73) EN: (l_73) ENP: 0x7f9f90003200

SN: (l_99) EN: (l_99) ENP: 0x7f9f900032c0

SN: (l_33) EN: (l_33) ENP: 0x7f9f90003380

SN: (l_14) EN: (l_14) ENP: 0x7f9f90002af0

RU: (l_5) ENP: 0x7f9f90001510

Похоже, что для события (l_5) он не сериализует общий указатель. Согласно документации Cereal, это происходит, если общий указатель уже сериализован. Распечатав также адреса, я могу сделать вывод, что это не так.

Не могли бы вы посоветовать?

...