C++需手动实现序列化,常用方法包括Boost.Serialization、文件流、JSON或Protobuf。使用Boost需添加serialize方法并选择归档类型;简单场景可手写流操作;跨语言推荐JSON(如nlohmann/json)或Protobuf;根据需求权衡开发效率与性能。

在C++中,序列化和反序列化对象没有像Java或Python那样的内置机制,需要开发者手动实现。常用的方法包括使用文件流、第三方库(如Boost.Serialization)或自定义序列化逻辑。
Boost库提供了强大的序列化支持,可以轻松地将C++对象保存到文件或内存中,并在需要时恢复。
步骤如下:
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <fstream>
class Person {
public:
std::string name;
int age;
// 默认构造函数(反序列化需要)
Person() {}
Person(const std::string& n, int a) : name(n), age(a) {}
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & name;
ar & age;
}
};
// 序列化
void save_person() {
Person p("Tom", 25);
std::ofstream ofs("person.txt");
boost::archive::text_oarchive oa(ofs);
oa << p;
}
// 反序列化
void load_person() {
Person p;
std::ifstream ifs("person.txt");
boost::archive::text_iarchive ia(ifs);
ia >> p;
std::cout << "Name: " << p.name << ", Age: " << p.age << std::endl;
}
对于简单对象,可以直接用std::ostream和std::istream进行格式化读写。
立即学习“C++免费学习笔记(深入)”;
适用场景:数据结构简单、不需要跨平台兼容性。
示例:将对象写入文本文件
class Point {
public:
double x, y;
void save(std::ostream& os) const {
os << x << " " << y << "\n";
}
void load(std::istream& is) {
is >> x >> y;
}
};
使用方式:
Point p{1.5, 2.5};
std::ofstream out("point.txt");
p.save(out);
Point q;
std::ifstream in("point.txt");
q.load(in);
如果需要与其他语言交互,推荐使用JSON或Protocol Buffers。
JSON方案(使用nlohmann/json):
#include <nlohmann/json.hpp> NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Person, name, age) // 序列化 nlohmann::json j = person; std::string s = j.dump(); // 转为字符串 // 反序列化 Person p = j.get<Person>();
Protobuf需要定义.proto文件并生成C++代码,适合高性能、强类型的场景。
基本上就这些。根据项目需求选择合适的方式:开发效率优先用Boost,跨平台用JSON,高性能用Protobuf,轻量级可手写流操作。以上就是c++++怎么序列化和反序列化对象_c++对象序列化反序列化方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号