
Hi Emil and Joel,
Thank you for your valuable suggestions. As you might have noticed I'm
rather new to exceptions (in general and the boost library), this
helped a lot.
Thanks!
Diederick
On Sun, Oct 25, 2009 at 3:06 PM, Emil Dotchevski
On Sat, Oct 24, 2009 at 9:10 PM, Diederick C. Niehorster
wrote: Hi,
I have another question regarding the exception library. I would like to use the BOOST_THROW_EXCEPTION() macro, but also add some tags of my own at the throw site. How do I do this?
How would i rewrite the below? typedef boost::error_info
std_range_which; throw boost::enable_error_info(std::out_of_range("Matrix -=: Inputs do not have same shape")) << std_range_which(Rows()!=M.Rows()? "row" : "col"); I would strongly recommend that you don't add a user message as error info. Just add the data the catch site needs to format a message. That said...
Simply doing BOOST_THROW_EXCEPTION(std::out_of_range("Matrix -=: Inputs do not have same shape")) << std_range_which(Rows()!=M.Rows()? "row" : "col"); does not work
The problem is that std::out_of_range does not derive from boost::exception. This is the precise situation boost::enable_error_info is designed for:
BOOST_THROW_EXCEPTION(boost::enable_error_info(std::out_of_range("Matrix -=: Inputs do not have same shape")) << std_range_which(Rows()!=M.Rows()? "row" : "col");
Or (if you throw std::out_of_range a lot) just derive from it and boost::exception, then you don't need to use enable_error_info:
struct my_out_of_range: virtual std::out_of_range, virtual boost::exception { };
BOOST_THROW_EXCEPTION(my_out_of_range() << std_range_which(Rows()!=M.Rows()? "row" : "col");
Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users