gpt4 book ai didi

c++ - 在 C++ 中 boost 序列化 vector

转载 作者:行者123 更新时间:2023-12-04 07:57:23 25 4
gpt4 key购买 nike

你好,所以我有这两个类,我想序列化 vector

class PlayerInventory
{
private:
friend class boost::serialization::access;
template <class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar &itemID &itemCount;
}

public:
int itemID;
int itemCount;
};

class player
{
private:
friend class boost::serialization::access;
template <class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar &username &password &inv;
}

public:
string username;
string password;
std::vector<PlayerInventory> inv;
};
出于某种原因,它没有将完整 vector 序列化为前 2 个元素,这是正确的做法吗?

最佳答案

我最强烈的怀疑是您在阅读之前可能没有完全刷新存档流。
简单的概念证明,注意注释:
Live On Coliru

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <iostream>
#include <iomanip>

class PlayerInventory {
friend class boost::serialization::access;
template <class Archive> void serialize(Archive& ar, unsigned) {
ar &itemID &itemCount;
}

public:
int itemID;
int itemCount;
};

class player {
friend class boost::serialization::access;
template <class Archive> void serialize(Archive& ar, unsigned) {
ar &username &password &inv;
}

public:
std::string username;
std::string password;
std::vector<PlayerInventory> inv;
};

#include <sstream>
int main() {
std::stringstream ss;

{
boost::archive::text_oarchive oa(ss);

player to_save;
to_save.username = "bla";
to_save.password = "blo";
to_save.inv = {
{ 1, 17 },
{ 2, 11 },
{ 3, 8800 },
{ 4, 0 },
{ 5, 1 },
{ 6, 1 },
{ 7, 1 },
{ 8, 1 },
{ 9, 42 },
};

oa << to_save;
} // <-- destructor of text_oarchive

std::cout << "Serialized stream: " << std::quoted(ss.str()) << std::endl;

player loaded;
{
boost::archive::text_iarchive ia(ss);
ia >> loaded;
}

std::cout << "Roundtrip username:" << std::quoted(loaded.username)
<< " password:" << std::quoted(loaded.password) << std::endl;

for (auto [id, count] : loaded.inv) {
std::cout << " - item " << id << " count:" << count << std::endl;
}
}
打印
Serialized stream: "22 serialization::archive 17 0 0 3 bla 3 blo 0 0 9 0 0 0 1 17 2 11 3 8800 4 0 5 1 6 1 7 1 8 1 9 42
"
Roundtrip username:"bla" password:"blo"
- item 1 count:17
- item 2 count:11
- item 3 count:8800
- item 4 count:0
- item 5 count:1
- item 6 count:1
- item 7 count:1
- item 8 count:1
- item 9 count:42

关于c++ - 在 C++ 中 boost 序列化 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66630493/

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