-1

我想编写一个用于从文件读取和写入对象的类。我使用模板关键字来实现这个目标。

 template<class T>
 class A{
  private:
   std::string filePath;//This will use to indicate the path of proper file.
  public:
    void save(T a){
     //write the given object to the file. The path is fetched by filePath
    }
    std::list<T> read(){
    //read the file and put each line in the list. The path is fetched by filePath
    }
    A(std::string path):filePath(path){}
 };

如果我使用这种方法,当我将它与 int 或 float 等原始类型一起使用时,一切都很好。但是当我想使用对象时,问题就出现了,例如圆形、矩形。我应该怎么做才能解决问题

4

1 回答 1

4

您可能想要序列化(甚至可能需要持久性,例如应用程序检查点...)。有时它被称为数据酸洗

您可以使用s11n库(提供用于序列化 C++ 数据的模板)。

您还可以在自己的类上定义operator <<和定义,因此您可以使用自己的代码和operator >>Rectangle r;std::cout << r;std::cin >> r;

您可以考虑使用JSON(或 YAML 或 XML ...)等文本序列化格式,例如使用jsoncpp

序列化任意图比序列化树状数据结构困难得多(因为循环引用和共享指针......)。

在 C++ 中没有简单的自动获取序列化工具的方法,您可能也不需要。想象一下,您正在代表Person某些班级中的 -s 之间的人类婚姻。出于效率原因,您可能希望有两个表(类型std::map<(Person,Person>),一个将妻子映射到每个丈夫,另一个将丈夫映射到每个妻子(您需要两个表,因为您经常查询某个女人的丈夫或某个男人的妻子) . 但是您可能不想序列化这两个表(它们在某种程度上是“冗余的”),只是一组丈夫+妻子对。这是为了说明序列化通常是特定于应用程序的

于 2013-09-28T12:42:29.687 回答