gpt4 book ai didi

c++ - Cereal 嵌套对象

转载 作者:行者123 更新时间:2023-11-28 05:28:32 24 4
gpt4 key购买 nike

我应该如何继续序列化嵌套对象?

例子:

class B
{
public:
int y;

template<class Archive>
void serialize(Archive& ar)
{
ar(CEREAL_NVP(y));
}
}

class A
{
public:
int x;
std::vector<B> nested;

template<class Archive>
void serialize(Archive& ar)
{
ar(CEREAL_NVP(x) what about nested? )
}
}

主要的想法是有类似的东西

{
"x": ...
"nested": [
{
"y": ...
},
{
"y": ...
}
]
}

顺便问一下,第二个问题。我可以从这样的 json 中再次获取 A 对象吗?谢谢你们 =)

最佳答案

您需要做的就是包括对序列化的支持 std::vector ( #include <cereal/types/vector.hpp> ) 并将其添加到您对存档的调用中:

ar(CEREAL_NVP(x), CEREAL_NVP(nested));

下面是一个完整的示例,它还展示了如何保存到 JSON,然后将数据加载回来:

#include <cereal/archives/json.hpp>
#include <cereal/types/vector.hpp>

class B
{
public:
int y;

template<class Archive>
void serialize(Archive& ar)
{
ar(CEREAL_NVP(y));
}
};

class A
{
public:
int x;
std::vector<B> nested;

template<class Archive>
void serialize(Archive& ar)
{
ar(CEREAL_NVP(x), CEREAL_NVP(nested) );
}
};

int main()
{
std::stringstream ss;
{
cereal::JSONOutputArchive ar(ss);
A a = {3, {{3},{2},{1}}};
ar( a );
}

std::cout << ss.str() << std::endl;

{
cereal::JSONInputArchive ar(ss);
A a;
ar( a );

cereal::JSONOutputArchive ar2(std::cout);
ar2(a);
}
}

输出为:

{
"value0": {
"x": 3,
"nested": [
{
"y": 3
},
{
"y": 2
},
{
"y": 1
}
]
}
}
{
"value0": {
"x": 3,
"nested": [
{
"y": 3
},
{
"y": 2
},
{
"y": 1
}
]
}
}

关于c++ - Cereal 嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40030351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com