0

我想创建一个 FileIO 类,它将提供一些方法,如写入或读取。我还想隐藏 FileIO 的实现(目前,它只是派生自 std::fstream)。问题是std::fstream 可能会抛出一些异常,但我不希望我的FileIO 类抛出std::fstream 异常,我想抛出我自己的(例如FileIO::SomethingBadHappened)。有没有一种优雅的方式来做到这一点?

我的解决方案是用额外的 try/catch 块重写 std::fstream 的每个方法。

编辑: FileIO 类只是一个例子。我正在寻找包装任意类的通用解决方案。

4

2 回答 2

3

做到这一点的“优雅”方法是不要重新发明轮子。尤其是这个已经往返月球数千次的轮子。这是经过验证的。你不需要在那里发明这个。

于 2012-06-18T21:59:53.207 回答
0

没有办法解决它 - 如果你想重新抛出不同的异常,你必须在任何可能产生异常的函数调用周围放置一个 try/catch 块。

您应该使用封装而不是使用继承 - 让您的类拥有一个可以将调用传播到的对象。这使您可以简化您的界面,只提供所需的功能,因此不需要包装完成工作的底层类的每个方法。

于 2012-06-18T22:25:23.640 回答