From: "Beman Dawes" <[EMAIL PROTECTED]>
> At 10:18 AM 12/17/2002, Peter Dimov wrote:
>
>  >The main problem is that I don't really know the answer. I can tell you
>  >what doesn't work, but I don't know yet what works. :-)
>
> How about these member functions (in addition to what()):
>
>     int         native_error() const { return m_sys_err; }
>      // Note: a value of 0 implies a library (rather than system) error
>
>     error_code  error() const { return m_err; }
>
>     const string & function() const;
>       // name of the function throwing the exception
>
>     const path & path1() const; // argument 1 to function; may be empty()
>     const path & path2() const; // argument 2 to function; may be empty()
>
> Code catching the exception with then have all the information that was
> available at the point the exception was thrown.

I assume that for

boost::filesystem::rename("this", "that");

function() would return "boost::filesystem::rename", path1() - "this",
path2() - "that", and error() - ENOENT (or its equivalent).

This looks good. In general, I have found that I need:

- what failed (operation, arguments)
- why did it fail (error code)

and this interface seems to provide them.

A nice addition would be a function returning a string that identifies the
error code ("ENOENT" for example, or "boost::filesystem::not_found_error",
if POSIX values aren't used); it's not hard to write one, of course, but the
upshot is that the code that reports the error doesn't need to change when
new error codes are introduced:

std::cerr << translate_text(ex.error_str()) << std::endl;

and only the translation table (a data file, no recompilation) needs to be
updated. But it's not _that_ important. :-)

Another interesting issue is to decide which of "what" or "why" (if any) to
expose using the type of the exception. The standard library hierarchy tends
to answer the "why" question, but there is no definitive rule which is best.
Code that catches an exception locally typically needs the "why" part, but
distant handlers are more interested in "what".

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to