|
Boost : |
From: Beman Dawes (bdawes_at_[hidden])
Date: 2003-01-10 16:22:25
At 11:18 AM 1/10/2003, William E. Kempf wrote:
>> From: David Abrahams <dave_at_[hidden]>
>> "William E. Kempf" <wekempf_at_[hidden]> writes:
>>
>> >> From: Martin Brown <martin_w_brown_at_[hidden]>
>> >>
>> >> 2. The user needs a localised error message.
>> >
>> > Is the textual representation of the exception name
>> > enough? If not, how do you propose a library provide
>> > such a localised error message?
>>
>> I will weigh in here with one strong opinion: producing localized
>> error messages should not be the job of the exception object or the
>> code which throws it. Error message formatting and localization
>> should happen after exceptions are caught.
>
>Full agreement. But what (if anything) must the exception object
>provide in order for the exception handlers to be able to format
>a localized message?
Peter Dimov and I went back and forth about this for the filesystem library
and decided:
... what() // from std::runtime_error. Implementation provides
// a very explicit message, including who(), path1(),
// path2(), and message reported by O/S (which is
// subject to locale on some O/S's.
int native_error() const;
// a return of 0 implies a library (rather than system) error
error_code error() const; // filesystem defined error code
const std::string & who() const; // name of func throwing exception
const path & path1() const; // argument 1 to func; may be empty()
const path & path2() const; // argument 2 to func; may be empty()
That's pretty heavyweight, but each function has important uses.
For Boost.Threads, path1() and path2() obviously don't apply, but I
wouldn't be surprised if a string identifying the thread in some way wasn't
a possible need.
--Beman
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk