我有一个包含此内容的数据文本文件
Map2D, [3, 2]
Dot3D, [25, -69, -33], [-2, -41, 58]
Map3D, [6, 9, -50]
Map2D, [3, 2]
Dot3D, [7, -12, 3], [9, 13, 68]
Map3D, [6, 9, 5]
Map2D, [3, 2]
Dot3D, [70, -120, -3], [-29, 1, 268]
Dot3D, [7, 12, 3], [-9, 13, 68]
Map3D, [1, 3, 8]
Dot2D, [5, 7], [3, 8]
基本上文本文件的第一个数据是我得到4个类(class)的类(class)名称
Map2D
Map3D
Dot2D
Dot3D
我试图编写自己的文件操纵器,以便我的程序可以提取上述数据,并对4个类的每个重载提取运算符>>,然后将其存储到相关对象中。
我当时在考虑使用 vector , map ,集合或列表进行存储。但是为此,我如何实现自己想要做的事情,例如存储到类的相关对象中。
我尝试过搜索如何创建自己的文件操纵器,但是如果有人可以向我展示一些示例代码并且我可以在测试文件中进行编译和执行,然后自己观察输出,那将会很好。我想使用iomanip对>>运算符进行重载
造成的一切麻烦,我感到抱歉。我也不能使用数组来实现以下数据存储。
我必须使用操纵器,因为我需要创建类似
我需要做类似的事情
cout << "Input File Name";
cin >> readFile;
并执行所有数据读取和对象创建
然后它将逐行读取记录,然后创建类以及其中的数据。
感谢您的所有帮助!
最佳答案
这是抽象工厂模式的非常典型的例子。
您不会使用iomanip来执行此操作。阅读第一个单词,然后找到适当的处理程序并调用它以读取(解析)该行的其余部分并创建适当的对象。
对象本身不需要是协变的,用于创建它们的工厂应该是协变的。
当然,如果要将它们全部存储在集合中,则必须弄清楚如何管理它们。
而且,如果您读了一个未知的“标题”,那么您当然会失败。