Re: [boost] Review Request: Boost Exception

Message: 9 Date: Tue, 14 Nov 2006 18:06:03 -0800 From: "Emil Dotchevski" <emildotchevski@hotmail.com> Subject: Re: [boost] Review Request: Boost Exception To: <boost@lists.boost.org> Message-ID: <BAY125-DAV966A5057842FC29C1782BD4EA0@phx.gbl> Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original
No, that's not quite what I meant.
void tag_exception(boost::exception& x) { // do something to x }
void read_file() { boost::adorn_exception e( boost::bind( tag_exception, _1 ) ); ... }
Could you provide more detail on the "do something to x" part? It seems to me that it would require something similar to the boost::exception::pimpl class, in that it must be able to store arbitrary values, but unlike boost::exception::pimpl it would have to keep some kind of proxy for each stored object, to be evaluated later if something throws.
Wouldn't that amount to executing a lot of code and using a lot of storage, even if nothing throws?
Here's how it would work:
void tag_exception(boost::exception& x, std::string* filename) { // append filename tag to exception here }
void read_file(const std::string& filename) { boost::adorn_exception e( boost::bind( tag_exception, _1, &filename) ); ... }
There is a (small) fixed cost of creating the functor for boost::bind and copying the pointer. By using pointers (or references, though the syntax is heavier), you avoid hidden copy-construction costs. Since boost::adorn_exception has to be declared after the variables it refers to, the pointers will still be valid when it is destroyed. Regards, Matthew Herrmann
participants (1)
-
Matthew Herrmann