我想创建一个FileIO类,它将提供一些像write或read这样的方法。另外我想隐藏FileIO的实现(目前,它只是从std :: fstream派生)。问题是std :: fstream可能会抛出一些异常,但我不希望我的FileIO类抛出std :: fstream异常,我想抛出自己的异常(例如FileIO :: SomethingBadHappened)。是否有一种优雅的方式来做到这一点?
我的解决方案只是使用额外的try / catch块重写std :: fstream的每个方法。
编辑: FileIO类只是一个例子。我正在寻找包装任意类的通用解决方案。
答案 0 :(得分:3)
这种“优雅”的方法是不重新发明轮子。尤其是这种轮子,已经数千次往返月球。它是经过验证的。你不需要发明这个那里。
答案 1 :(得分:0)
没有办法绕过它 - 你必须在任何函数调用周围放置一个try / catch块,如果你想重新抛出一个不同的异常,它会产生异常。
您应该使用封装 - 让您的类拥有一个可以传播您的调用的对象,而不是使用继承。这允许您简化界面,仅提供所需的功能,因此不需要包装执行工作的基础类的每个方法。