2013-03-28 64 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(); 
    } 
    } 
}