C ++编写自己的输入操作器

时间:2012-11-12 16:16:40

标签: c++

我有一个包含此

的数据文本文件
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级的类名

Map2D
Map3D
Dot2D
Dot3D

我正在尝试编写自己的文件操作符,以便我的程序可以提取上面的数据并重载提取运算符>>对于每个4类,然后将其存储到相关对象中。

我正在考虑使用矢量,地图,集合或列表进行存储。但是对于这个我如何实现我想做的事情,比如存储到类的相关对象中。

我尝试使用Google搜索如何创建自己的文件操作器,但如果有人可以向我展示一些示例代码并且我可以在测试文件中编译并执行它然后自己观察输出,那将会很好。我想使用iomanip对>>进行重载运营商

我很抱歉所造成的一切麻烦。我也可以不使用数组来实现以下数据存储。

我必须使用操纵器,因为我需要创建类似

的东西

我需要做类似

的事情
cout << "Input File Name";
cin >> readFile;

并执行所有数据读取&amp;对象创建

然后它将逐行读取记录,然后创建类以及其中的数据。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这是抽象工厂模式的一个非常典型的例子。

你不会使用iomanip来做到这一点。读取第一个单词,然后找到适当的处理程序并调用它来读取(解析)该行的其余部分并创建适当的对象。

对象本身不需要协变,用于创建它们的工厂应该是。

当然,如果您想将它们全部存储在一个集合中,您将需要弄清楚如何管理它。

如果你读到一个你不知道的“标题”,你当然会失败你的流。

答案 1 :(得分:-1)

你可以使用最明显的迭代器形式是一个指针:指针可以指向数组中的元素,并且可以使用increment运算符(++)迭代它们。但是存在其他形式的迭代器。例如,每个容器类型(例如向量)都有一个特定的迭代器类型,旨在以有效的方式遍历其元素。