可视化序列化c++类

visual Serializing a c++ class

本文关键字:c++ 序列化 可视化      更新时间:2023-10-16

可能重复:
如何在c++中序列化?

我有一个类

    Class Person
    {
      int age;
      char *name;
      char* Serialize()
      {
        //Need to convert age and name to char* eg:21Jeeva
      }
      void DeSerialize(char *data)
      {
        //Need to populate age and name from the data
      }
    };

在C#中,我们可以使用MemoryStream、BinrayWriter/BinaryReader来实现这一点。在c++中,我发现我们可以使用iostream来实现它。但无法获得一个合适的例子。

代码的目的是在调用serialize之后,我将通过套接字发送数据,并在接收端调用DeSerialize以填充回成员。

您可以看看Boost.Serialization。如果您只需要基于iostreams的简单文本序列化,则可能需要重载流提取运算符。对于序列化,这可能看起来像这样:

std::ostream & operator<<(std::ostream & stream, const Person & person) {
    stream << person.age << " " << person.name;
    return stream;
}

您必须使此函数成为Person的朋友才能使其工作。

对于反序列化,您将使用以下内容:

std::istream & operator>>(std::istream & stream, Person & person) {
    stream >> person.age >> person.name;
    return stream;
}

使用这些,您可以执行以下操作:

Person fred;
fred.name = "Fred";
fred.age = 24;
std::stringstream buffer;
buffer << fred << std::endl;
Person fred_copy;
buffer >> fred;

你可以在这里找到一个小的工作示例。

重载这些运算符的优点是,例如,可以将std::copystd::ostream_iterator一起使用,以便在一个语句中序列化整个Person集合。

您可以使用以下包装器将任何数据类型转换为字符流:

template<class TYPE>
string ToChar (const TYPE& value)
{
  stringstream ss;
  ss << value;
  return ss.str();
}

您可以按照自己想要的方式使用string对象;如使用c_str()转换为char流或复制到数组等。