![]() |
Boost : |
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2007-09-30 04:07:55
> 1) Why cant I just throw an boost::exception object?
>
> throw boost::exception() << boost::error_info<tag_errno>(100) <<
> boost::error_info<tag_file_name>("hello");
There are two reasons:
1) This design encourages throwing different types for different
failures, which is a good programming practice
2) It protects against the following subtle error:
try
{
foo();
}
catch( boost::exception & x )
{
x << boost::error_info<tag_file_name>("hello");
throw x; //should have been just throw;
}
Instead of re-throwing the original exception object by a throw
expression with no operand, we accidentally throw a new exception
object, which erases the original exception type (in the current
design of the library, this situation results in compile error.)
> 2) It might be nice to support "std::cerr << e", instead
> of requiring the use of e.what().
>
> std::cerr << e;
Yes, though I'm not big fan of operator overloading. OTOH, this can be
useful in templates, so I think it's a good idea.
> 3) Support for linking multiple error tags in a single expression
> might be useful and help in standarizing errors throughout an application.
>
> throw boost:::exception() <<
> boost::error_info<tag_errorno,tag_filename,tag_size,tag_width>(
> (1,"output.txt",100,200);
Could you clarify what you mean?
Thanks for your feedback!
Emil Dotchevski
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