如何自定义C++ value的序列化方法

avatar
作者
猴君
阅读量:0

在 C++ 中,为了实现自定义类型的值序列化,你需要提供一个将对象转换为字节流(序列化)以及从字节流还原为对象(反序列化)的方法

首先,创建一个名为 Person 的简单类:

#include<iostream> #include<string>  class Person { public:     std::string name;     int age;      Person() : name(""), age(0) {}     Person(std::string name, int age) : name(name), age(age) {} }; 

接下来,为 Person 类添加序列化和反序列化方法。这里我们使用 C++ 的字符串流(std::stringstream)作为示例:

#include <sstream>  class Person {     // ... 其他代码 ...      // 序列化方法     std::string serialize() const {         std::stringstream ss;         ss.write(reinterpret_cast<const char*>(&age), sizeof(age));         std::string nameSize = std::to_string(name.size());         ss.write(nameSize.c_str(), nameSize.size());         ss.write(name.c_str(), name.size());         return ss.str();     }      // 反序列化方法     static Person deserialize(const std::string& data) {         std::stringstream ss(data);         int age;         ss.read(reinterpret_cast<char*>(&age), sizeof(age));         std::string nameSizeStr;         for (char c; ss.get(c); nameSizeStr += c);         size_t nameSize = std::stoi(nameSizeStr);         std::string name;         for (size_t i = 0; i< nameSize; ++i) {             char c;             ss.get(c);             name += c;         }         return Person(name, age);     } }; 

现在,你可以使用 serialize() 方法将 Person 对象转换为字节流,并使用 deserialize() 方法将字节流还原为 Person 对象:

int main() {     Person person("Alice", 30);     std::string serializedData = person.serialize();      Person deserializedPerson = Person::deserialize(serializedData);     std::cout << "Name: "<< deserializedPerson.name << ", Age: "<< deserializedPerson.age<< std::endl;      return 0; } 

请注意,此示例仅适用于简单的数据类型,如整数和字符串。对于更复杂的数据结构,你可能需要使用第三方库(如 Boost.Serialization、cereal 等)来处理序列化和反序列化。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!