设为首页 加入收藏

TOP

4.9.2 类摘要
2013-10-07 15:02:19 来源: 作者: 【 】 浏览:71
Tags:4.9.2 摘要

4.9.2  类摘要

exception库提供两个类:exception和error_info,它们是exception库的基础。

exception的类摘要如下:

  1. class  exception  
  2. {  
  3. protected:  
  4.         exception();  
  5.         exception( exception const & x );      
  6.         ~exception();      
  7.         template <class E,class Tag,class T> 
  8. private:  
  9.         friend E const & operator<<( E const &, error_info<Tag,T> const & );  
  10. };      
  11. template <class ErrorInfo,class E> 
  12.     typename ErrorInfo::error_info::value_type * get_error_info( E & x );  

exception类几乎没有公开的成员函数(但有大量用于内部实现的私有函数和变量),被保护的构造函数表明了它的设计意图:它是一个抽象类,除了它的子类,任何人都不能创建或者销毁它,这保证了exception不会被误用。

exception的重要能力在于其友元操作符<<,可以存储error_info对象的信息,存入的信息可以用自由函数get_error_info<>()随时再取出来。这个函数返回一个存储数据的指针,如果exception里没有这种类型的信息则返回空指针。

exception特意没有从std::exception继承,因为现实中已存的大量代码已经有很多std::exception的子类,而如果exception也是std::exception的子类,对exception再使用继承可能会引发"钻石型"多重继承问题。

error_info的类摘要如下:

  1. template <class Tag,class T>   
  2. class error_info  
  3. {  
  4. public:  
  5.     typedef T value_type;      
  6.       
  7.     error_info( value_type const & v );      
  8.     value_type & value();      
  9. };  

error_info提供了向异常类型添加信息的通用解法。第一个模板类型参数Tag是一个标记,我们已经在3.11节(第91页)见过了类似的用法。它通常(最好)是一个空类,仅用来标记error_info类,使它在模板实例化时生成不同的类型。第二个模板类型参数T是真正存储的信息数据,可以用成员函数value()访问。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.9.8 高级议题 下一篇4.11.2 BOOST_STATIC_CONSTANT

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: