【发布时间】:2012-06-18 21:51:52
【问题描述】:
我想创建一个 FileIO 类,该类将提供一些方法,如写入或读取。我还想隐藏 FileIO 的实现(目前,它只是派生自 std::fstream)。问题是 std::fstream 可能会抛出一些异常,但我不希望我的 FileIO 类抛出 std::fstream 异常,我想抛出自己的异常(例如 FileIO::SomethingBadHappened)。有没有优雅的方法来做到这一点?
我的解决方案是用额外的 try/catch 块重写 std::fstream 的每个方法。
编辑: FileIO 类只是一个例子。我正在寻找包装任意类的通用解决方案。
【问题讨论】:
-
您的“解决方案”显然是错误的。问题也是如此。直接使用
fstream有什么问题?它是用来使用的,而不是用来包装的。 -
我强烈建议不要在这里使用继承。如果您尝试调解对文件流的访问,只需围绕它编写一个包装类,这样您就不必担心这些异常(您可以避免调用
exceptions)。在这里使用继承是有问题的。 -
问题是 FileIO 可以改变并且可以使用 WinApi 来归档 i/o 而不是 std::fstream。在这个当前示例中,我可以避免调用异常,但如果我使用 std::fstream 以外的其他东西怎么办?
-
@Kele:
fstream已经在做什么了...您是否认为它不使用... Windows 下的 Windows API?fstream已经解决了这个问题,你到底想解决什么问题? -
@EdS。这只是一个例子,我正在寻找一个通用的解决方案。