Boost logo

Boost Users :

From: Boris (boriss_at_[hidden])
Date: 2007-02-23 11:45:31


After some playing around I got now this code to compile (based on
boost::multi_index::detail::const_member_base):

template<class Class,typename Type,Type Class::*PtrToMember,Type
(*func)(const Type&)>
struct my_member
{
   typedef Type result_type;

   template<typename ChainedPtr>
   Type& operator()(const ChainedPtr& x)const
   {
     return operator()(*x);
   }

   Type operator()(const Class& x)const
   {
     return func(x.*PtrToMember);
   }

   Type& operator()(const reference_wrapper<const Class>& x)const
   {
     return operator()(x.get());
   }

   Type& operator()(const reference_wrapper<Class> x,int=0)const
   {
     return operator()(x.get());
   }
};

std::string test(const std::string &s)
{
   return boost::algorithm::to_lower_copy(s);
}

typedef multi_index_container<
   employee,
   indexed_by<
     hashed_unique<
       my_member<employee, std::string, &employee::name, &test>
>
>
> mi;

mi employees;

I don't know if it can be more generalized or if it is of any help for
anybody else except me. But now I don't have the time to play around some
more with key extractors unfortunately. :)

Boris


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net