Boost logo

Boost Users :

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


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