|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-11-17 13:07:36
From: <spam2002_at_[hidden]>
[...]
> This fact (and because I think using functors for publish-subscribe
> is a good idea) forced me to write my own functor library, which
> implements almost the same functionality as boost::function,
> boost::bind and boost::mem_fn together (with quite a different
> interface though and without providing automatic conversion
> from "foreign" functors of course).
What does "foreign" function object mean?
[...]
> 0. Am I missing something??
Not likely.
> 1. What was the design rationale behind prefering the possibility to
> adapt "foreign" function objects over the possibility to use
> boost::function in publish-subscribe schemes? IMHO, the latter is
> probably needed by more programmers.
boost::function can be used in publish/subscribe schemes. On subscription,
you need to identify the subscriber by a unique identifier.
template<class F> void subscribe(std::string const & id, F f);
This doesn't place any requirements on F and doesn't couple the subscriber
identity with the action that is performed on publish.
The identifier may be a string (as it is in my messaging subsystem), or it
might be a void const * (if you need to identify objects by address.)
If you insist on automatically deducing the subscriber identity from the
action, I don't see an easier way to do this besides reimplementing
function/bind or moving to object-based subscribers (ABC with a pure virtual
publish().)
> 2. As mentioned above, there seems to be no way to extend
> boost::function, boost::bind and boost::mem_fn to provide equality
> operations AND automatic conversions from "foreign" functors.
There isn't because function/bind have no concept of a 'foreign' function
object. Any function object is as good as the next.
-- Peter Dimov Multi Media Ltd.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk