|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2005-08-21 17:31:30
"Andrey Semashev" <andysem_at_[hidden]> writes:
Andrey, your mailer wraps long lines; you might want to put your code
in an attachment next time.
http://www.boost.org/more/discussion_policy.htm#longlines
> struct my_exception : public std::exception { /* ... */ };
>
> void guarded_foo(int n, const char* p); // throws bad_cast, bad_alloc and my_exception
>
> // This is the class of the exception handler object
> struct CHandler {
> void on_exception(std::bad_cast& e) throw() {
> std::cout << "on_exception called, bad_cast caught" << std::endl;
> }
> void on_exception(std::bad_alloc& e) throw() {
> std::cout << "on_exception called, bad_alloc caught" << std::endl;
> }
> void on_exception(my_exception& e) throw() {
> std::cout << "on_exception called, my_exception caught" << std::endl;
> }
> };
>
> void foo(int n) {
> leaving_scope_guard<
> guard::with_catcher< // Indicate that we're expecting some
> // exceptions to be thrown by guarded_foo
> CHandler, // This is the class, which object is to
> // process exceptions caught
> guard::exceptions< std::bad_cast,
> std::bad_alloc, my_exception
> >, // Exceptions to be caught (up to
> // 10 exception types supported)
This part worries me thes reasons:
0. I doubt its utility.
1. It induces a catch block and in many cases a catch block
should be avoided when possible in exception-neutral code.
2. I think it may encourage abuse with the same lure that
exception-specifications present to the casual user.
> boost::shared_ptr< CHandler > // An optional parameter
> // describes the way the
> // pointer to CHandler
> // object should be stored.
> // The default value would
> // be CHandler*.
Do we really need all this parameterization? I think a generalized
scopeguard is a good idea, but this smells like overkill.
> >
> > guard(boost::bind(&guarded_foo, n, "called from foo"),
> boost::shared_ptr< CHandler >(new CHandler)); // Guard object
>
> // ...
> }
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk