7 Şubat 2018 Çarşamba

exception

Giriş
Şu satırı dahil ederiz.
#include <boost/exception/all.hpp>
BOOST_THROW_EXCEPTION Macrosu
Açıklaması şöyle.
Note that BOOST_THROW_EXCEPTION automatically adds boost::exception as a base class for the thrown type.
Örnek
Şöyle yaparız.
BOOST_THROW_EXCEPTION(std::runtime_error("hello exception"));
Yakalamak için şöyle yaparız.
catch (const std::exception& ex)
Örnek
Elimizde kendi exception sınıfımız varsa fırlatmak için şöyle yaparız.
struct allocation_failed : public std::exception
{
  const char *what() const noexcept { return "allocation failed"; }
};

BOOST_THROW_EXCEPTION(allocation_failed{});
boost::exception Sınıfı
Elimizde şöyle bir kod olsun. Bu kodun niçin lazım olduğunu anlamadım.
typedef boost::error_info<struct tag_errmsg, std::string> errmsg_info;
boost::exception'ı string'e çevirmek için şöyle yaparız.
catch (boost::exception &e)
{
  std::cerr << *boost::get_error_info<errmsg_info>(e);
  if ( allocation_failed* af = dynamic_cast<allocation_failed*>(&e) )
  {
    std::cerr << af->what() << std::endl; // redundant
  }
}

Hiç yorum yok:

Yorum Gönder