-2

我有几个类是我从文件读取/写入文件的各种数据的容器。通常文件每行有一个实体(逗号分隔的字段),但有时一个实体分散在几行中。

我正在尝试提出一种正确的方法来重用代码读取和写入文件。我可以在每个处理 fstream、所有检查和字符串格式的类中使用单独的 Read() 和 Write() 函数,但我觉得应该有更好的方法来重用一些代码。

编辑:

我意识到我对我的问题不够具体。阻止我按照某些答案/评论建议的方式实施它的原因是我有多行实体。所以,我不能只将从文件中读取的一行传递给一个类来解析它。有时我需要通过几行。

当一个实体是多行时,通常它在行首有一个 id 字段,所以重复 id 意味着我需要读取几行。

例如,一个文件可以是一个多边形,然后每行有两个坐标,这种情况很简单。但是另一个文件可以是一组多边形,然后它会有一个多边形 id 加上每行中的两个坐标。像那样:

id, x, y
0, 1, 2
0, 5, 0
0, -1, -1
1, 4, 4
1, 0, 8
1, -4, 4
1, 0, 0

编辑2:

当我在第一次编辑中描述我的问题时,我意识到如何处理我的多行实体。我仍然可以将读取的行一一传递给每个类,并使其填充未完成的实体。现在这对我来说似乎很明显,因为只要我尝试向其他人解释,问题就会变得清晰。感谢您的意见!

4

3 回答 3

1

如果各种容器的数据足够相似,您应该能够为文件 IO 创建一个类。将您要写入/填充的对象类型传递给它。

让每个类实现一个定义了两个方法的接口;一个接受当前行或字符串数​​组(在行被拆分之后)并设置所有对象值,另一个返回一个字符串,其中所有数据作为逗号分隔的字符串(这是用于写入)。多线情况将更难处理,可能值得将其视为特殊情况。

文件 IO 类应该只打开/关闭、读/写、用逗号分隔行以及调用它传递的对象的方法。文件 IO 类应该被传递接口类型的指针。

于 2012-12-10T21:27:22.843 回答
1

我记得读过 Stroustrup 的一本书,他推荐了一些类似于将单独的功能隔离到单独的类中的东西。然后,您可以使用多重继承将两者组合为一个类。因此,与其构建一个解决当前问题的大类,不如构建更易于重用以解决未来问题的单独部分。本质上总是寻求构建类,以便将来可以重用它们。

于 2012-12-10T21:53:46.813 回答
0

operator<<你可以为 ostream重载

于 2012-12-10T21:33:24.670 回答