设为首页 加入收藏

TOP

4.9.5 包装标准异常
2013-10-07 15:02:25 来源: 作者: 【 】 浏览:81
Tags:4.9.5 包装 标准 异常

4.9.5  包装标准异常

exception库提供一个模板函数enable_error_info<T>(T &e),其中T是标准异常类或者其他自定义类型。它可以包装类型T,产生一个从boost::exception和T派生的类,从而在不修改原异常处理体系的前提下获得boost::exception的所有好处。如果类型T已经是boost::exception的子类,那么enable_error_info将返回e的一个拷贝。

enable_error_info()通常用在程序中已经存在异常类的场合,对这些异常类的修改很困难甚至不可能(比如已经编译成库)。这时候enable_error_info()就可以包装原有的异常类,从而很容易地在不变动任何已有代码的基础上把boost::exception集成到原有异常体系中。

示范enable_error_info()用法的代码如下:

  1. #include <boost/exception/all.hpp> 
  2. struct my_err{};                    //某个自定义的异常类,未使用boost::exception  
  3. int main()  
  4. {  
  5.     using namespace boost;  
  6.     try  
  7.     {  
  8.         //使用enable_error_info包装自定义异常  
  9.         throw enable_error_info(my_err()) << errinfo_errno(10);  
  10.     }  
  11.     catch (boost::exception& e)         //这里必须使用boost::exception来捕获  
  12.     {  
  13.         cout << *get_error_info<errinfo_errno>(e)<<endl;  
  14.     }  
  15. }  

注意代码中catch的用法,enable_error_info()返回的对象是boost::exception和my_err的子类,catch的参数可以是这两者中的任意一个,但如果要使用boost:: exception所存储的信息,就必须用boost::exception来捕获异常。

enable_error_info()也可以包装标准库的异常:

  1. throw enable_error_info(std::runtime_error("runtime"))  
  2.  << errinfo_at_line(__  LINE __);                       //包装标准异常  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.9.3 向异常传递信息 下一篇4.10 uuid

评论

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