C++ 编写通用的保存和读取

C++ 编写通用的保存和读取,c++,visual-c++,c++11,C++,Visual C++,C++11,我想为从/到文件读取和写入对象编写一个类。我使用模板关键字来实现这个目标 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 fetch

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

 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){}
 };
模板
甲级{
私人:
std::string filePath;//这将用于指示正确文件的路径。
公众:
无效保存(T a){
//将给定对象写入文件。路径由filePath获取
}
std::list read(){
//读取文件并将每一行放入列表中。路径由filePath获取
}
(std::string path):文件路径(path){}
};
如果我使用这个方法,当我将它与诸如int或float之类的基本类型一起使用时,一切都很好。但当我想处理对象时,问题就出现了,例如,圆、矩形。 我应该怎么做才能解决您可能想要的问题(或者甚至,例如……)。有时它被称为数据酸洗

可以使用库(为C++数据序列化模板)。 您还可以在自己的类上定义

操作符
,因此使用
矩形r你将代码
std::cout>r

<>你可以考虑文本序列化格式,比如(或YAML或XML…),例如使用

序列化任意图要比序列化类似树的数据结构困难得多(因为和共享指针…)


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

您到底在问什么?什么样的东西?您的层次结构中有根类吗?为什么(为什么)要输入和输出它们?我正在尝试编写一个简单的引擎来存储和检索文件中的数据。所以我尝试使用模板来概括这种情况。我不知道对象或对象的字段。如果你需要一个完全通用的解决方案,在便携式C++中是不可能的。你需要一些C++代码生成器。这并不简单。为什么你需要一个通用的简单引擎?您是否考虑使用一些应用程序检查点库?