如何重用代码来读取/写入多个类的文件
How would I go about reusing code for reading from/writing to files from several classes?
我有几个类,它们是从文件中读取/写入文件的各种数据的容器。通常文件每行有一个实体(逗号分隔的字段),但有时一个实体分布在几行中。
我正在尝试想出一种正确的方法来重用对文件的代码读取和写入。我可以在每个类中有单独的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<<
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 此代码编译良好,但文件未创建?请指出错误
- 找不到Linux Visual Studio代码C++文件
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如何使代码打印文本文件中的第一行?
- 编译多个C++文件.调用二进制文件以运行代码
- VI工作室代码错误无法打开输出文件主.exe
- 获取 clang++:错误:在编译文件系统库的代码时
- 如何在软件代码中使用ofstream创建文件
- 我可以删除 *.o文件(代码:: blocks)
- 用于人脸检测的Haar级联xml文件代码解释OpenCV
- 如何直接从分配的内存中执行mmaped二进制文件/代码
- 文件 I/O 代码未正确读取C++
- 单个文件代码中未定义的引用错误
- 将数组写入文件代码不起作用(C++)
- IO文件代码不一致
- 如何在单个文件C++代码中使用库
- 是否有可能改变.so文件代码在android工作室本身,并使构建
- 疑难解答阅读CSV文件代码
- Bazel头文件代码生成器