2013-03-28 52 views
0

我正在清理我的代碼並通過異常切換到錯誤處理(因爲這會在某些地方顯着縮短代碼)。通過例外來處理錯誤

這意味着我需要設計自己的異常類層次結構。

現在它看起來是這樣的:

namespace error 
    { 
    /** Generic error */ 
    class generic : public std::except 
    { 
    public: 
     generic(const std::string& s) : std::except(s) {} 
    }; 

    /** Namespace for network related errors */ 
    namespace network 
    { 
    /** Generic network error */ 
    class generic : public ::error::generic 
     { 
     public: 
     generic(const std::string& s) : ::error::generic(s) {} 
     }; 

    /** Network timeout */ 
    class timeout : public ::error::network::generic 
     { 
     public: 
     timeout(const std::string& s) : ::error::network::generic(s) {} 
     }; 
    } 
    } 

的問題是,這個看起來並不特別可讀。處理異常類的層次結構時是否有一些首選樣式?

+2

這看起來很好。如果我是你,我只是簡單地刪除':: error'和':: error :: network',因爲在這些情況下它們不是必需的(如果我不誤讀某些東西) –

+0

我同意@ KirilKirov說過,但我也沒有看到「泛型」類的很多理由。 –

+0

你可能的意思是'std :: exception',而不是'except',並且它有一些你需要實現的純虛擬成員函數。確保您的異常對象符合它需要的異常保證(特別是,複製應該不會**拋出異常。具有'通用'錯誤和'通用'網絡異常似乎有點關閉... –

回答

2

當一個類名沒有描述它將會擁有的角色時,這肯定表明該類不應該存在。你有兩個類叫做generic。他們有什麼意義?

真的,你只引入了一個例外類型,timeout。我會重寫你給的只是:

namespace error 
{ 
    namespace network 
    { 
    class timeout : public std::exception 
    { 
     public: 
     timeout(const std::string& s); 
     const char* what(); 
    } 
    } 
}