Я пытаюсь сериализовать 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
могут конфликтовать с функциями, предоставляемыми boost, но даже с переименованными функциями это не работает.