-4

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

IE

enum AlarmStatus
{
   Clear=0,
   Active
};

class AlarmInfo
{
public:
std::string S;
int I;
AlarmStatus alarmStatus;
void setAlarmStatus(AlarmStatus alarmStatus);
AlarmStatus getAlarmStatus();
};

有什么想法可以在代码中做到这一点吗?我知道 boost 有可以序列化一个类的 boost/archive/ 库,但它不是“HeaderOnly 库”?是否有一个仅是 Header 的库?

谢谢

4

2 回答 2

0

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

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

于 2012-12-12T18:31:48.840 回答
0

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

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);

}

于 2012-12-12T18:38:52.500 回答