代码之家  ›  专栏  ›  技术社区  ›  Ignas Limanauskas

为每个类定义错误代码的优缺点是什么?

oop
  •  0
  • Ignas Limanauskas  · 技术社区  · 16 年前

    在创建模块的过程中,我面临着一个困境:每个类应该在内部定义自己的错误代码,还是应该定义一个模块范围的错误代码?

    到目前为止,优点和缺点是齐头并进的,但我倾向于定义每类错误:

    1.

    class MyClass
    {
    public:       
       typedef enum _TResult {
           EOk = 0,
           EErrNoMemory,
           EErrBadParam,
           <...>
       } TResult;
    
       TResult DoSomething();
    };
    

    与以下内容相反:

    2-1:

    #define OK              (0)
    #define ERR_NO_MEMORY   (1)
    #define ERR_BAD_PARAM   (2)
    

    typedef enum _TResult
    {
        EOk,
        EErrNoMemory,
        EErrBadParam,
        <...>
        EErrTimeOut,
        EErrFeedThePenguin
    } TResult;
    

    4 回复  |  直到 16 年前
        1
  •  3
  •   workmad3    16 年前

    对于每类错误代码,我要评论的一件事是,由于同一代码根据类的不同意味着不同的事情,因此您无法编写单个错误记录器(或者至少不容易)。

    也就是说,你总是可以两者都用。有一个带有常见错误的全局枚举:

    enum GlobalErrors {
       EOk = 0,
       EErrOutOfMemory,
       // etc.
       EFreeErrorCodeBase
    };
    

    然后在课堂上,你可以有:

    class Something {
        enum ClassErrors {
           EErrCantInitialize = EFreeErrorCodeBase,
           EErrCorruptedData,
           // etc.
        };
    ...
    };
    

    这为您提供了全局错误代码的位置,并确保您的类错误代码不会与全局错误代码重叠(这是由编译器维护的)。

        2
  •  0
  •   Andy White    16 年前

        3
  •  0
  •   kgiannakakis    16 年前

    如果您需要其他类中的相同错误代码,请分别定义它们。你需要提前做一点计划。您现在可能不需要它们,但将来可能会创建一个需要类似或相同错误代码的类。

    否则,最好让他们在同一个班。这将有助于维护源代码和错误代码。这也将使阅读和理解代码变得更加容易。

        4
  •  0
  •   Nick Swarr    16 年前

    typedef enum _DatabaseErrorCodes {
       ConnectionFailure = 0,
       Timeout,
       InvalidParameters
    } DatabaseErrorCodes;
    
    typedef enum _CommonErrorCodes {
       NullArgument = 0,
       SystemOutOfMemory,
       FeedThePenguin
    } CommonErrorCodes;
    

    课程流动性太强,容易发生变化。将错误代码绑定到特定类似乎是一种没有任何明显优势的耦合。我认为(理想情况下)状态代码应该能够独立存在并具有意义。