我已经搜索过这个主题,但找不到相关的答案......
假设我有一个像这样声明的抽象类:
class Abstract{
virtual Interface* createHandle() = 0;
virtual ~Abstract() = 0;
};
基本上,一个抽象类提供了一个独特的函数,该函数返回类接口的任何实现(也是一个抽象类)。
我想知道这种设计如何处理错误。如果createHandle()
遇到错误并且无法返回指向接口实现的指针,那么正确处理和通知此问题的最佳方法是什么?
我首先想到的是返回一个空指针,然后检查调用代码是否返回的指针为空。它会起作用,但我发现这设计得很糟糕,因为接口(即抽象)从不暗示 createHandle() 可以返回一个空指针,或者将返回一个空指针来表示错误(我发现这个事实很糟糕只是留下评论说“如果错误应该返回null”)。
然后,我想到了在接口指针中携带这些信息。也就是说,将两个公共非虚拟函数添加到设置/获取某种错误代码的类中。但我根本不喜欢它,因为它与 Interface 类无关,而是与createHandle()
Interface 不知道的实现有关(即有一个成员变量存储与使用代码相关的错误该类的代码相关的错误,感觉我认为非常错误,尽管我可能是错的)。
那么我想知道,指定该函数在发生错误时的行为方式是一种优雅的方式(以完全独立于任何实现的方式,实际上恰恰相反:强制实现以它的方式处理错误)指定的)。