首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::container::vector不能用Cereal序列化?

boost::container::vector不能用Cereal序列化?
EN

Stack Overflow用户
提问于 2019-10-17 17:46:28
回答 1查看 49关注 0票数 1

我正在尝试使用Cereal来序列化一个boost::container::vector<int> (我知道boost提供了一个类似于Cereal的串行化库,但是整个项目都使用Cereal,而且只有一个角落碰巧依赖于一个boost向量)。

我已经为boost::container::vector<int>定义了模板化的saveload函数,但是boost::container::vector<int>失败了,静态断言说它找不到函数的保存/加载对、序列化函数或save_minimal/load_minimal函数对。

下面是一个简单的代码来说明这个问题。为了进行比较,我还定义了一个模板结构myStruct,它接受与boost::container::vector相同类型的模板参数,以检查相同的代码是否适用于我自己的类型。

代码语言:javascript
复制
#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_NAMECEREAL_LOAD_FUNCTION_NAMECEREAL_SAVE_FUNCTION_NAME,因为我认为saveload方法可能与boost提供的函数冲突,但即使使用重命名的函数,它也不起作用。

EN

回答 1

Stack Overflow用户

发布于 2021-06-04 01:15:37

您必须在namespace cerealnamespace boost::container中定义save/load函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58429654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档