stout代码分支之十二:巧妙的EXIT

  在c++中,为了便于定位问题,进程异常退出时,需要获取返回码和错误信息。stout中将这种功能巧妙的封装成EXIT类。

  

#define EXIT(status) __Exit(status).stream()

struct __Exit
{
  __Exit(int _status) : status(_status) {}

  NORETURN ~__Exit()
  {
    std::cerr << out.str() << std::endl;
    exit(status);
  }

  std::ostream& stream()
  {
    return out;
  }

  std::ostringstream out;
  const int status;
};

  __EXIT类以返回码作为构造函数参数,在析构时,先将错误信息输出到cerr中,再执行exit(status)。这是RAII的一次巧妙实践。

  用户只需要执行

EXIT(1) << "something failed";

  就可以1退出,同时输出"something failed"。

转载于:https://www.cnblogs.com/taiyang-li/p/5905515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值