$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Oleg Abrosimov (beholder_at_[hidden])
Date: 2006-07-27 22:13:54
Jeremy Day wrote:
> 
> One more idea to improve maintainability of client code:
>> class my_exceptions_handler
>> {
>>      BOOST_DEFINE_EXCEPTION_HANDLER_FIRST(exception_type,
>> exception_variable, 1)
>>      {
>>          //code here
>>      }
>>      BOOST_DEFINE_EXCEPTION_HANDLER(exception_type2, exception_variable,
>> 1, 2)
>>      {
>>          //code here
>>      }
>>      BOOST_DEFINE_EXCEPTION_HANDLER(exception_type2, exception_variable,
>> 2, 3)
>>      {
>>          //code here
>>      }
>>      BOOST_DEFINE_EXCEPTION_HANDLER_LAST(exception_type,
>> exception_variable, 3)
>>      {
>>          //code here
>>      }
>> };
>>
>> These macros automatically define exceptions list eliminating last piece
>> of code duplication. numbers are used to decorate typelist' name that is
>> already defined.
> 
> 
> I'm not sure that I understand the need for the _FIRST and _LAST versions of
> the BOOST_DEFINE_EXCEPTION_HANDLER macro.  I also don't understand why I
> need to decorate the typelist's name.  If you have some pseudocode in mind
> for the definitions of BOOST_DEFINE_EXCEPTION_HANDER_FIRST,
> BOOST_DEFINE_EXCEPTION_HANDER, and BOOST_DEFINE_EXCEPTION_HANDER_LAST I'd be
> happy to look into this.
Note different number of arguments in these macros. It describes need 
for BOOST_DEFINE_EXCEPTION_HANDLER_FIRST. it defines handler and typedef 
for exceptions typelist with name decorated by its last argument. (with 
BOOST_PP_CAT(A, B) macro)
BOOST_DEFINE_EXCEPTION_HANDLER defines handler and defines a typedef 
that extends (with mpl stuff) typedef generated by 
BOOST_DEFINE_EXCEPTION_HANDLER_FIRST macro. Its third parameter is used 
to restore the last defined exceptions typelist's name and last 
parameter is used to decorate name of typelist generated by it's own.
BOOST_DEFINE_EXCEPTION_HANDLER_LAST defines the final exceptions 
typedef. It doesn't needs parameter to decorate it, only one to know a 
name of the last defined typelist name.
Note, that parameters mentioned are not restricted to be numbers, but 
any sequence of numbers, letters and underscores.
Hope it helps.
Best,
Oleg Abrosimov.