Boost logo

Boost :

From: Jeremy Day (jeremy.day_at_[hidden])
Date: 2006-07-27 13:25:02


On 7/27/06, Oleg Abrosimov <beholder_at_[hidden]> wrote:

> one further improvement I see is to define simple macros to eliminate
> some details from client code. something like this would be appropriate:
>
> try {
> throw std::logic_error("testing");
> } BOOST_CATCH(my_exception_handler());
>
> and
>
> try {
> throw std::logic_error("testing");
> } BOOST_CATCH_EX(exceptions, my_exception_handler());

Good suggestions. Done and done.

and of course, I agree with David Abrahams that exceptions typelist
> should be sorted to handle most derived first. boost::is_base_of<Base,
> Derived> from type_traits library can be used to achieve it.

Also a good suggestion. Until last night I wasn't sure exactly how to
handle this, but I figured it out.

One more idea to improve maintainability of client code:
>
> class my_exceptions_handler
> {
> BOOST_DEFINE_EXCEPTION_HANDLER_FIRST(exception_type,
> exception_variable, 1)
> {
> //code here
> }
> BOOST_DEFINE_EXCEPTION_HANDLER(exception_type2, exception_variable,
> 1, 2)
> {
> //code here
> }
> BOOST_DEFINE_EXCEPTION_HANDLER(exception_type2, exception_variable,
> 2, 3)
> {
> //code here
> }
> BOOST_DEFINE_EXCEPTION_HANDLER_LAST(exception_type,
> exception_variable, 3)
> {
> //code here
> }
> };
>
> These macros automatically define exceptions list eliminating last piece
> of code duplication. numbers are used to decorate typelist' name that is
> already defined.

I'm not sure that I understand the need for the _FIRST and _LAST versions of
the BOOST_DEFINE_EXCEPTION_HANDLER macro. I also don't understand why I
need to decorate the typelist's name. If you have some pseudocode in mind
for the definitions of BOOST_DEFINE_EXCEPTION_HANDER_FIRST,
BOOST_DEFINE_EXCEPTION_HANDER, and BOOST_DEFINE_EXCEPTION_HANDER_LAST I'd be
happy to look into this.

As it stands now there is a new version of Boost Catcher in the vault. I
added the BOOST_CATCH macros and the exception sorting. Comments are
welcome and encouraged.

Jeremy


Boost list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk