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