如何避免枚举值冲突?

缺口

我正在建立一个前端库。后端产生许多错误代码,这些错误代码被枚举:

enum backerr {BACK_ERR1, BACK_ERR2, BACK_ERR3};

我的前端会产生许多其他错误代码:

enum fronterr {FRONT_ERR1, FRONT_ERR2, FRONT_ERR3};

为了方便起见,我希望有一个错误代码返回函数,该函数将根据发生的错误返回前端或后端错误。

在没有两个错误代码的值冲突的情况下,并且考虑到我们不知道后端的值,有什么办法可以发生?

紫罗兰色

如果您不知道后端可能生成什么,那么不会,没有办法可靠地选择您自己的错误代码,以免它们冲突。

因此,您有两个选择(至少)。

如果后端以某种方式发布错误范围(例如在头文件中),则第一个很有用。老实说,应该这样做是因为程序没有其他方法可以区分不同的错误代码和/或类型。

如果它们发布,那么您很容易发现最高的代码并选择自己的代码,从而为后端扩展留出了足够的空间。例如,如果后端使用1..100,则从开始1000任何系统突然报告错误的机率是以前版本的十倍,这是一个很小的机会。

第二种方法是,如果您希望真正的分离且冲突可能性为零。

没有什么可以阻止您返回类似于以下内容的结构:

struct sFrontError {
    enum fronterr errorCode;
    enum backerr  backendCode;
};

并将其用于您的错误。然后,您对前端的枚举变为:

enum fronterr {FRONT_OK, FRONT_BACK, FRONT_ERR1, FRONT_ERR2, FRONT_ERR3};

您可以按以下方式对其进行评估:

  • 如果errorCodeFRONT_OK,则没有错误。
  • 如果errorCodeFRONT_BACK,则错误来自后端,您可以在中找到其代码backendCode
  • 否则,这是一个前端错误,并且代码中errorCode完全指定了该错误

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章