読者です 読者をやめる 読者になる 読者になる

堕(惰)プログラマ開発記録

タイトル変えようかなとも思ってるけれど,思い浮かばない

Boost.Exceptionが簡単過ぎる件

C++ Boost

あまりやったことのない「例外処理」に手を出してみました!
Boost.Exceptionを使ってみようと色々とググってみたらとても簡単で…

class my_error : public boost::exception, public std::exception{};

こんな風にboost::exceptionを継承した例外クラスがあったとします。
すると

typedef boost::error_info<struct err_info,std::string> add_info;

int hoge()
{
  try
  {
    //投げてみる
    BOOST_THROW_EXCEPTION(my_error()); //throwするときにファイル名・行番号情報などをつけてくれるマクロ
  }
  catch(my_error& e)
  {
    e << add_info("hogeのcatch通ったよ!"); //こんな風に追加情報を付加できる!
    throw;
  }

  return 0;
}

で、追加情報を取り出すときは、

int main()
{
  try
  {
    hoge();
  }
  catch()
  {
    std::cout << *boost::get_error_info<err_info>(e) << endl; //こうやる。
  }

  return 0;
}

初めて使ったけど、それはとっても嬉しいなって