libsigc++ 3.6.0

exception_catch()
Adaptors

sigc::exception_catch() catches an exception thrown from within the wrapped functor and directs it to a catcher functor.

sigc::exception_catch() catches an exception thrown from within the wrapped functor and directs it to a catcher functor.

This catcher can then rethrow the exception and catch it with the proper type.

Note that the catcher is expected to return the same type as the wrapped functor so that normal flow can continue.

Catchers can be cascaded to catch multiple types, because uncaught rethrown exceptions proceed to the next catcher adaptor.

Examples:
  struct my_catch
  {
  int operator()()
  {
  try { throw; }
  catch (std::range_error e) // catch what types we know
  { std::cerr << "caught " << e.what() << std::endl; }
  return 1;
  }
  }
  int foo(); // throws std::range_error
  sigc::exception_catch(&foo, my_catch())();
  std::endl
  basic_ostream< _CharT, _Traits > & endl(basic_ostream< _CharT, _Traits > &__os)
  std::cerr
  ostream cerr
  std::range_error
  sigc::bind
  decltype(auto) bind(const T_functor &func, T_bound... b)
  Creates an adaptor of type sigc::bind_functor which binds the passed argument to the passed functor.
  Definition bind.h:266
  sigc::exception_catch
  decltype(auto) exception_catch(const T_functor &func, const T_catcher &catcher)
  Definition exception_catch.h:130

The functor that sigc::exception_catch() returns can be passed directly into sigc::signal::connect() or sigc::signal::connect_first().

Example:
  sigc::signal<int()> some_signal;
  some_signal.connect(sigc::exception_catch(&foo, my_catch));