Boost logo

Boost Users :

Subject: Re: [Boost-users] [mpl] bind help sought
From: Manfred Doudar (manfred.doudar_at_[hidden])
Date: 2010-02-23 00:56:52


On Mon, 22 Feb 2010 20:51:58 -0800
Steven Watanabe <watanabesj_at_[hidden]> wrote:

> 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))
>

Yes, I know I can do that, but I don't want to, because I don't need a
T instance, I just need the type.

Any ideas how I can achieve that would be appreciated.

Cheers,

-- 
Manfred

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