$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Yuval Ronen (ronen_yuval_at_[hidden])
Date: 2006-04-05 13:46:47
Yuval Ronen wrote:
>      #define MY_STRUCT_AS_TUPLE(obj) const_tie(obj.x, obj.y, obj.z)
> 
>      bool operator<(const MyStruct &lhs, const MyStruct &rhs)
>      {
>          return MY_STRUCT_AS_TUPLE(lhs) < MY_STRUCT_AS_TUPLE(rhs);
>      }
Nobody corrected me, but this code works just fine with the existing 
boost::tie. There's no need for const_tie. I even prepared a macro to 
ease the creation of comparison operators:
     #define IMPLEMENT_COMPARISON_OPERATOR(TYPE, MAKE_COMPARABLE_MACRO, 
OPERATOR) \
     bool operator OPERATOR(const TYPE &a_lhs, const TYPE &a_rhs) \
     { \
         return MAKE_COMPARABLE_MACRO(a_lhs) OPERATOR 
MAKE_COMPARABLE_MACRO(a_rhs); \
     }
which I can use as (if I have a struct by the name MyStruct):
     #define MY_STRUCT_AS_TUPLE(obj) tie(obj.x, obj.y, obj.z)
     IMPLEMENT_COMPARISON_OPERATOR(MyStruct, MY_STRUCT_AS_TUPLE, ==)
     IMPLEMENT_COMPARISON_OPERATOR(MyStruct, MY_STRUCT_AS_TUPLE, <)
I think this is a very convenient way of creating comparison operators, 
if anyone is interested, and maybe it will even be a good idea to add it 
to the tuples documentation as "possible usages".
Hope it was useful,
Yuval