对象序列化 c++11代码
时间: 2023-05-27 22:04:12 浏览: 185
c++json序列化代码生成工具
以下是一个简单的 C++ 11 代码,可以将对象序列化为二进制或 JSON 格式。
```
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/json_iarchive.hpp>
#include <boost/archive/json_oarchive.hpp>
#include <boost/serialization/vector.hpp>
using namespace std;
class MyData {
public:
string name;
int value;
vector<string> items;
MyData() : name(""), value(0) {}
MyData(const string& _name, int _value, const vector<string>& _items)
: name(_name), value(_value), items(_items) {}
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & name;
ar & value;
ar & items;
}
};
int main() {
// create an instance of MyData
MyData data("my data", 42, {"item1", "item2", "item3"});
// serialize to binary
ofstream ofs("mydata.bin", ios::binary);
boost::archive::binary_oarchive bo(ofs);
bo << data;
// deserialize from binary
MyData data2;
ifstream ifs("mydata.bin", ios::binary);
boost::archive::binary_iarchive bi(ifs);
bi >> data2;
cout << "name: " << data2.name << ", value: " << data2.value << endl;
for (const auto& item : data2.items) {
cout << "item: " << item << endl;
}
// serialize to JSON
ostringstream oss;
boost::archive::json_oarchive jo(oss);
jo << data;
string json_str = oss.str();
cout << "JSON: " << json_str << endl;
// deserialize from JSON
MyData data3;
istringstream iss(json_str);
boost::archive::json_iarchive ji(iss);
ji >> data3;
cout << "name: " << data3.name << ", value: " << data3.value << endl;
for (const auto& item : data3.items) {
cout << "item: " << item << endl;
}
return 0;
}
```
注意:
1、需要安装 Boost 库(具体安装方法请自行搜索)。
2、在此示例中,MyData 类定义了一个模板函数 serialize()。这是 Boost 序列化库所要求的,用来指示需要序列化的数据成员。
3、这个例子使用了 Boost 序列化库的二进制格式和 JSON 格式。其他格式也可用,具体用法可以参考 Boost 序列化库的文档。
阅读全文