From: "Vladimir Prus" <[EMAIL PROTECTED]> > Peter Dimov wrote: > >>I think that we also need to consider the problem of translating a > >>filesystem_error to a localized error message. [...] > > Seems like there is quite a few alternatives: > > 1. Perform localization at the point where exception is thrown. The biggest > problem there is getting the right message catalog.
This is possible, but not very flexible. The throw point must know how to localize, and once the exception is thrown, you can no longer reformat the message. [...] > 2. Keep the format string and variable arguments in exception class. > This is similiar, but IMO, different from the idea to specify values > of 'what'. E.g > > class filesystem_exception { > public: > const string& format_string() const; > const vector<string>& parameters() const; > > const char* what() const { > boost::format f(format_string()); > const vector<string>& p = parameters(); > > for (size_t i = 0; i < p.size(); ++i) > f % p[i]; > > // Do something tricky to return pointer > // to f.str().c_str(), but prevent the > // string from going out of scope. > } > > void imbue(const locale&); > }; This can be made to work, but there's still too much coupling for my taste. The exception class must still know how to translate, and the user has no control over the string. I.e. if you get a bug report that the string isn't correct, you can't fix it. 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. :-) _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost