2009-05-28 106 views
0

在創建模塊的過程中,我面臨着一個兩難:每個類應該在內部定義自己的錯誤代碼,還是應該定義一個模塊範圍的錯誤代碼?每班定義錯誤代碼有什麼優點和缺點?

到目前爲止利弊去手牽手,但我傾向於確定每類錯誤:

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) 

或者:

2-2:

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

從你的經驗會是什麼疑難雜症的對於任何的辦法嗎?

回答

3

我會就每類錯誤代碼發表評論的一件事是,由於相同的代碼將意味着您無法編寫單個錯誤記錄器(或者至少不容易)不同的事情取決於班級。

也就是說,你可以隨時使用兩者。與常見的錯誤全球枚舉:

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

,然後在課堂上,你可以有:

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

它給你一個地方,全球的錯誤代碼,並確保你的類的錯誤代碼不會重疊全局變量(這是由編譯器維護的)。

+0

這是一個很好的主意,謝謝!給予好評! – 2009-05-28 06:45:54

0

我認爲這取決於您希望用戶如何使用該系統。如果您的錯誤代碼對多個類有意義,那麼將它們置於「全局」級別,以一些組織良好的格式(例如按概念分組的錯誤代碼)是有意義的。如果您的課程都返回自己的自定義錯誤代碼,我會在課堂級別上定義它們。

0

如果您要從其他類中獲取相同的錯誤代碼,請分別定義它們。你需要提前做一點規劃。您現在可能不需要它們,但您可能會在將來創建一個需要相似或相同錯誤代碼的類。

否則,最好讓他們在同一班。這將有助於維護源代碼和錯誤代碼。它將使閱讀和理解代碼更容易。

0

我認爲有意義的狀態代碼枚舉存在於你的類的外部是一個不錯的選擇。通過這種方式,他們可以談論他們的地位情況,而不是實施一個毫無疑問會改變或者其職責可能會跨越多個班級的班級。

typedef enum _DatabaseErrorCodes { 
    ConnectionFailure = 0, 
    Timeout, 
    InvalidParameters 
} DatabaseErrorCodes; 

typedef enum _CommonErrorCodes { 
    NullArgument = 0, 
    SystemOutOfMemory, 
    FeedThePenguin 
} CommonErrorCodes; 

類過於流動,容易變化。將錯誤代碼綁定到特定的類似乎沒有任何明顯的優勢。我認爲(理想情況下)地位代碼應該能夠獨立存在並具有意義。

相關問題