|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-10-30 07:03:26
Beman Dawes wrote:
> At 03:22 PM 10/27/2003, Jessie Hernandez wrote:
> >...
> >Well, I personally prefer a "large" socket exception hierarchy. This
> makes
> >it very easy to catch specific exceptions and provides better error
> >messages. With the current STL file classes, you may get errors
> such as >"ios_base::failbit set!" (since there is only one exception
> class, >ios_base::failure). This doesn't tell me why the failure
> happened (does
> the
> >user have permissions to the file, etc.?) I'd rather have classes
> such as >socket_base::connection_refused, etc., which have their
> what() methods >overloaded to print out more specific messages.
>
> FWIW, the LWG just looked at a similar situation for regular
> expressions.
> The solution they prefer is for a single exception class for the
> library, but adding a member function which will return a code which
> identifies the specific reason for the failure. This member function
> is in addition to what().
FWIW, following that LWG precedent in all cases is dead wrong. ;-)
If code needs to determine the specific reason for the failure, the
specifity needs to be encoded in the exception type.
try
{
f();
}
catch(reason_I_care_about const & x)
{
// appropriate action
}
The alternative forced upon users is
try
{
f();
}
catch(general_failure const & x)
{
// who is that general failure character?
if(x.code() == reason_I_care_about)
{
// appropriate action
}
else
{
// throw; // not one of ours
}
}
which breaks the "never catch if you don't know how to handle" rule.
Alex T will have something to add I'm sure, it also breaks his beloved two
phase model. ;-)
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk