我正在構建一個框架,我需要錯誤檢查類。我不能使用例外(不允許)。我決定創建一個由所有需要錯誤報告的類繼承的類,這些類的功能如ReportError() [爲類本身]和GetError() [獲取最後一個錯誤 - 由調用者使用]以及函數添加自定義錯誤稱爲AddError(/ *參數* /)。該類有一個名爲FW_ERROR_TYPES的枚舉類型,它有一些最常見的默認錯誤類型。例如,FW_ERROR_INIT(未正確初始化),FW_ERROR_CTOR(構造對象期間的錯誤)等。當類報告錯誤時,還可以添加可選的描述(已記錄)(可用於以後的分析以查看發生了什麼錯誤)。這一切都很好,並且對我的目的來說很好。關於繼承枚舉的設計問題
問題來了,當我想添加自定義錯誤。自定義錯誤不能被添加爲FW_ERROR_TYPES,因爲枚舉不會被繼承錯誤類的類繼承。我在設計錯誤類時並沒有預見到這個問題。我原來的「設計」是,當GetError()被調用,以獲得最後一個錯誤,它會返回一個FW_ERROR_TYPES,所以使用像這樣的時候,將產生一個編譯器錯誤:
if (SomeClass->GetError()) // OR
if (SomeClass->GetError()) == true)
也就是說,它會強制誰正在使用它來專門檢查FW_ERROR_TYPES。當我發現繼承錯誤類的類不能擴展FW_ERROR_TYPES枚舉時,我不得不使用泛型枚舉並強制GetError()返回一個無符號整數。我將unsigned int定義爲FW_ERROR_TYPE,以便至少有一些指示表明正在返回一個錯誤代碼。
唷!所以我的問題是,我怎樣才能改進這個設計(或者廢棄它並使用更好的設計)?有沒有辦法繼承枚舉類型?我看着codeproject網站,發現一個相當複雜的解決方案(如果一切都失敗了,我會放棄)。任何幫助將不勝感激。
謝謝!
這不是一個壞主意。我預測的唯一問題是RTTI是一個昂貴的操作,而檢查編號枚舉的速度要快得多。 感謝您的想法,但我會記住,當我需要這種類型的錯誤檢查,而不必擔心性能太多。 – Samaursa 2010-08-01 04:53:10