boost :: container :: vector не может быть сериализован с Cereal? - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь сериализовать boost::container::vector<int> с использованием Cereal (я знаю, что boost предоставляет библиотеку сериализации, похожую на Cereal, но весь проект использует Cereal, и есть только один его угол, который зависит от вектора повышения).

Я определил шаблонные функции save и load для boost::container::vector<int>, но Cereal завершается неудачно со статическим утверждением, говоря, что не может найти пару функций сохранения / загрузки, функцию сериализации илиsave_minimal / load_minimal пара функций.

Вот простой код, демонстрирующий эту проблему. Для сравнения я также определил структуру шаблона myStruct, которая принимает тот же тип аргументов шаблона, что и boost::container::vector, чтобы проверить, работает ли тот же код с моими собственными типами.

#include <cereal/archives/binary.hpp>
#include <sstream>
#include <boost/container/vector.hpp>

namespace bc = boost::container;

template<typename T, typename V = void, typename W = void>
struct myStruct {};

template<typename A>
void save(A& ar, const myStruct<int>& v) {}

template<typename A>
void load(A& ar, myStruct<int>& v) {}

template<typename A>
void save(A& ar, const bc::vector<int>& v) {}

template<typename A>
void load(A& ar, bc::vector<int>& v) {}

int main()
{
    std::stringstream ss;
    {
        cereal::BinaryOutputArchive oarchive(ss);
        bc::vector<int> myData;
        //myStruct<int> myData;
        oarchive(myData); 
    }
    {
        cereal::BinaryInputArchive iarchive(ss); 
        bc::vector<int> myData;
        //myStruct<int> myData;
        iarchive(myData); 
    }
}

РЕДАКТИРОВАТЬ: примечаниечто я также пытался переопределить CEREAL_SERIALIZE_FUNCTION_NAME, CEREAL_LOAD_FUNCTION_NAME и CEREAL_SAVE_FUNCTION_NAME перед включением любых заголовков зерновых, поскольку я думаю, что методы save и load могут конфликтовать с функциями, обеспечивающими повышение, но даже с переименованными функциями этоне работает.

...