Boost logo

Boost Users :

From: Malcolm Smith (yg-boost-users_at_[hidden])
Date: 2002-12-10 14:34:31


Doug,

I think I can deal with the latter, I'll read boost.bind now and see if it
fits the bill.

If worst comes to worst I could always create a polymorphic 'payload' to go
with the state information. Speed is not an issue so I'm not worried about
the overheads. The functions being called send socket requests to a digital
video recorder over a WAN and they take longer to perform than my app would
ever perform.

Thanks for the info....more reading.

--
Malcolm Smith
MJ Freelancing- http://www.mjfreelancing.com
Software Protection for C++Builder
Borland Technology Partner
"Douglas Gregor" <gregod_at_[hidden]> wrote in message
news:200212100856.34752.gregod_at_cs.rpi.edu...
> On Tuesday 10 December 2002 04:48 am, Malcolm Smith wrote:
> > I read Boost.Function info and it sounds like part of the solution.
> >
> > Is there a way of associating a key with a container of *different*
> > boost.Function's ?
>
> Not directly. How are you planning to invoke functions in this map? You
gave
> the example:
>
>   // I know this is not valid code but it explains what I'm after
>   typedef std::map<int, *pf(...)> StateFunctions;
>
>   void Method1(void);
>   int Method2(TCustomClass &MyClass);
>
>   StateFunctions[1] = Method1;
>   StateFunctions[2] = Method2;
>
> My question is: do you really want the parameter lists to be different for
> StateFunctions[1] and StateFunctions[2], meaning that when calling you
might
> need something like:
>
> foo = StateFunctions[x];
> if (foo has arity zero)
>   foo();
> else if (foo has arity one with type TCustomClass)
>   foo(herClass);
> else if (...)
>   etc. etc.
>
> ?
>
> Or are all the parameters to the functors known when they are put into the
> StateFunctions map? Then what you really want is something that achieves
the
> desired effect:
>
>   StateFunctions[1] = Method1;
>   StateFunctions[2] = something that calls Method2 with parameter herClass
>
> If it's the latter case, you've run into the classic
Boost.Bind/Boost.Function
> (or Boost.Lambda/Boost.Function, if your compiler can handle it) scenario
:)
>
> Then you want:
>
>   typedef std::map<int, boost::function<void()> > StateFunctions;
>
>   StateFunctions[1] = &Method1;
>   StateFunctions[2] = boost::bind(&Method2, boost::ref(&herClass));
>
>   int x = something();
>   StateFunctions[x](); // call the appropriate state function
>
> If it's the former case (different parameter lists), then there's no
direct
> "Boost way" to do this that I know of.
>
> Doug
>
>
> Info: <http://www.boost.org>
> Wiki: <http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl>
> Unsubscribe: <mailto:boost-users-unsubscribe_at_[hidden]>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>
>

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