Boost logo

Boost :

From: Oleg Abrosimov (beholder_at_[hidden])
Date: 2006-07-20 21:55:41


Hello Jeremy!

I'm not a metaprogramming expert, but I have one suggestion to imrove
your implementation:

replace

static void execute(Iterator*, LastIterator*, F f)
{
     typedef typename boost::mpl::deref<Iterator>::type item;

     try
     {
         throw;
     }
     //...
}

with

static void execute(Iterator*, LastIterator*, F f)
{
     assert(std::uncaught_exception());
     typedef typename boost::mpl::deref<Iterator>::type item;

     try
     {
         throw;
     }
     //...
}

It prevents use of your catcher outside of any catch block.
Actually, it is the first useful application of
std::uncaught_exception() function that I'm aware of ;-)

Now I'm more interested in the client side code - the visitor and code
duplication here. It can be seen from another point - there is a
coupling of exception handlers (operators in visitor) and types of
exception that can be handled by catcher. We can have more freedom if
client code would looks like this:

//in application_exception_handler.hpp
struct my_exception_handler
{
     void operator()(std::string& sError); //Note here
     void operator()(std::exception& oError);
     void operator()(std::logic_error& oError);
     void operator()(void);
};

//in application.cpp
typedef boost::mpl::vector<std::logic_error, std::exception> exceptions;
//Note here

int main()
try {
     throw std::logic_error("testing");
} catch(...) {
     catcher<exceptions>(my_exception_handler()); //Note here
}

with this transformation one can use one my_exception_handler class with
many reduced exceptions typelists. It also eliminates the duplication
problem. Duplication still exists but is intensional.

Best,
Oleg Abrosimov.

Jeremy Day wrote:
> Oleg,
>
> I just uploaded catcher to the Boost Vault. You can find it (catcher.hpp)
> along with VS7 project files at http://tinyurl.com/l6lt4 . Any comments
> that you have (or anyone else, for that matter) are more than welcome.
>
> Jeremy*
>
> *
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>


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