Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的类序列化+;_C++_Serialization - Fatal编程技术网

C++ C+中的类序列化+;

C++ C+中的类序列化+;,c++,serialization,C++,Serialization,我需要有一种方法将代码中的类序列化为字符串。稍后,我需要使用该字符串填充该类的一个实例 i、 e 你知道我如何在代码中做到这一点吗?我知道boost有boost/archive/library可以序列化一个类,但它不是一个“headernly库”?是否有仅为页眉的库 谢谢C++没有反射。因此,像一些其他编程语言提供的功能,如C#的BinaryFormatter,XmlSerializer,或DataContractSerializer,是不可能实现的。您必须自己实现序列化 (就我个人而言,我认为

我需要有一种方法将代码中的类序列化为字符串。稍后,我需要使用该字符串填充该类的一个实例

i、 e

你知道我如何在代码中做到这一点吗?我知道boost有boost/archive/library可以序列化一个类,但它不是一个“headernly库”?是否有仅为页眉的库


谢谢

C++没有反射。因此,像一些其他编程语言提供的功能,如C#的
BinaryFormatter
XmlSerializer
,或
DataContractSerializer
,是不可能实现的。您必须自己实现序列化


(就我个人而言,我认为这是一件好事。您的文件格式不应该与实现如此耦合,因为过一段时间后您会想要更改实现。然后发现您被搞糟了,因为您的文件格式是根据该代码定义的)

创建一个往返串行代码并调用它

struct Person{
  string name;
  int age;

  void toSerial(ostream& stream){ stream << name << age; }
  void fromSerial(istream& stream){  stream >> name >> age; }
}

int main(){
  Person person;
  //save to data.txt
  ofstream fileOut("data.txt");      
  person.toSerial(fileOut);
  fileOut.close();

  //load from data.txt
  ifstream fileIn("data.txt");
  person.fromSerial(fileIn);
struct-Person{
字符串名;
智力年龄;
void toSerial(ostream&stream){stream name>>age;}
}
int main(){
个人;
//保存到data.txt
流文件输出(“data.txt”);
个人资料(归档);
fileOut.close();
//从data.txt加载
ifstream fileIn(“data.txt”);
person.fromSerial(fileIn);

}

如果您想完全独立完成,可以重载
运算符
进行反序列化——但直接转到流,而不是字符串(需要字符串时使用stringstream)。不过,一开始可能更干净。另外,我在页面顶部的搜索栏中键入“serialize[c++]”找到了一些。你已经试过哪些了?为什么这个问题被否决了??我做了研究,发现很少有图书馆,我只是觉得应该简单一些,不需要图书馆来做
struct Person{
  string name;
  int age;

  void toSerial(ostream& stream){ stream << name << age; }
  void fromSerial(istream& stream){  stream >> name >> age; }
}

int main(){
  Person person;
  //save to data.txt
  ofstream fileOut("data.txt");      
  person.toSerial(fileOut);
  fileOut.close();

  //load from data.txt
  ifstream fileIn("data.txt");
  person.fromSerial(fileIn);