如何重用代码来读取/写入多个类的文件

How would I go about reusing code for reading from/writing to files from several classes?

本文关键字:文件 代码 何重用 读取      更新时间:2023-10-16

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

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

编辑:

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

当一个实体是多行时,通常它在行的开头有一个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:

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

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

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

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

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

您可以为ostream 过载operator<<