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"。

posted @ 2016-09-25 11:07  后端技术小屋  阅读(283)  评论(0编辑  收藏  举报