Enums 关于继承枚举的设计问题

Enums 关于继承枚举的设计问题,enums,Enums,我正在构建一个需要对类进行错误检查的框架。我不能使用异常(不允许)。我决定创建一个由所有需要错误报告的类继承的类,该类具有函数,如ReportError()[用于类本身]和GetError()[用于获取最后一个错误-由调用方使用]以及用于添加名为AddError(/*arguments*/)的自定义错误的函数。该类有一个名为FW_ERROR_TYPES的枚举类型,其中有一些最常见的默认错误类型。例如,FW_ERROR_INIT(未能正确初始化)、FW_ERROR_CTOR(对象构造期间的错误)等

我正在构建一个需要对类进行错误检查的框架。我不能使用异常(不允许)。我决定创建一个由所有需要错误报告的类继承的类,该类具有函数,如ReportError()[用于类本身]和GetError()[用于获取最后一个错误-由调用方使用]以及用于添加名为AddError(/*arguments*/)的自定义错误的函数。该类有一个名为FW_ERROR_TYPES的枚举类型,其中有一些最常见的默认错误类型。例如,FW_ERROR_INIT(未能正确初始化)、FW_ERROR_CTOR(对象构造期间的错误)等。当类报告错误时,还可以添加一个可选的描述,该描述会被记录下来(有助于以后的分析,以查看出错的原因)。这一切都很好,对我来说效果相当不错

当我想添加自定义错误时,问题就出现了。无法将自定义错误添加为FW_ERROR_类型,因为继承错误类的类未继承枚举。在设计错误类时,我没有看到这个问题。我最初的“设计”是,当调用GetError()以获取最后一个错误时,它将返回FW_error_TYPES,因此使用时将生成编译器错误,如下所示:

if (SomeClass->GetError()) // OR
if (SomeClass->GetError()) == true) 
也就是说,它将强制使用它的人专门检查FW_ERROR_类型。当我发现继承error类的类不能扩展FW_error_TYPES enum时,我不得不使用泛型enum,并被迫让GetError()返回一个无符号整数。我将unsigned int定义为FW_ERROR_TYPE,以便至少有一些指示返回错误代码

呸!所以我的问题是,我如何改进这个设计(或者放弃它,选择一个更好的)?是否有方法继承枚举类型?我查看了codeproject站点,发现了一个相当复杂的解决方案(如果所有其他方法都失败了,我将试一试)。任何帮助都将不胜感激


谢谢

错误值可以是类而不是枚举。您可以有一个基本错误类
FwError
,使用诸如
GetMessage()
之类的有用方法,然后从该基本错误类继承各种错误类型。当您必须检查返回的错误是否为某种类型的错误时,可以使用运行时类型信息检查错误类型。如果需要创建新类型的错误,可以从基本错误类或更具体的子类继承。如果调用者收到一个它从未听说过的错误类型,多态性确保它仍然可以像处理base
fwrerror
一样处理它,并打印一条有意义的消息。

我发现了两个(有点“复杂”)解决此问题的方法:


这个主意一点也不坏。我预见到的唯一问题是,RTTI是一个昂贵的操作,而对照编号的枚举进行检查要快得多。不过,谢谢你的想法,因为当我需要这种类型的错误检查时,我会记住这一点,而不用太担心性能。