Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2006-01-17 10:58:01


David Greene <greened_at_[hidden]> writes:

> I'm trying something new using mpl's inherit_linearly but I can't
> figure out how to do what I want to do.
>
> The idea, simply:
>
> template<typename Policies>
> class Test : public inherit_linearly<Policies, inherit<_1, _2> >::type {
> public:
> void do_something(void) {
> for each Base in Policies
> Base::do_something();
> rof
> }
> };
>
> Is there a straightforward way to do this or am I thinking about this
> in the wrong way?

See mpl::for_each:

  template<typename Policies>
  class Test
    : public inherit_linearly<Policies, inherit<_1, _2> >::type
  {
      struct do_it
      {
          template <class B>
          void operator()(Test* self, B*) const
          {
              self->Base::do_something();
          };
      };

  public:
     void do_something(void)
     {
         mpl::for_each<
             Policies
           , boost::add_pointer<mpl::_>
>(
              boost::bind(do_it(), this, _1)
         );
     }
  };

http://www.boost-consulting.com/mplbook covers this topic.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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