$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] [mpl] bind help sought
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2010-02-22 23:51:58
Manfred Doudar wrote:
> Hi,
>
> I need to be explicit about a function call, but unsure quite how to
> make it work, cut down example follows:
>
>
> struct M
> {
>   static
>   void foo() { ... }
> };
>
> struct R
> {
>   static
>   void foo() { ... }
> };
>
>
> struct Func
> {
>   typedef void result_type;
>
>   template <typename T, typename U>
>   result_type
>   operator()(U& u) const
>   {
>       T::foo();   // call on either M or R
>
>       // do something with 'u'
>   }
> };
>
>
>
>
> int main(int argc, char** argv)
> {
>   using namespace boost::mpl;
>
>   typedef vector<M, R> vec;
>
>   Func f;
>   Object instance;
>   for_each<vec>(boost::bind(&Func::operator()<XXX, Object>,
>                             boost::ref(f),
>                             instance)
>                );
>
>   return 0;
> }
>
>
>
> Question is, what goes in at XXX above?
>
> I was thinking something along the lines of:
>
>    boost::mpl::bind<boost::mpl::_1>
>
> ..but well, that doesn't work.
>   
Try passing an argument of type M or R as a parameter:
template<typename T, typename U>
void operator()(const T&, U& u) const {
    T::foo();
}
...
for_each<vec>(boost::bind(boost::ref(f), _1, instance))
In Christ,
Steven Watanabe