From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-04-20 10:22:55
From: "Dale Peakall" <dale.peakall_at_[hidden]>
> Bill Kempf wrote:
> > As pointed out in another post, member functions can be trivially
> > changed into function objects eliminating the need for direct support
> > by any_function. In early discussions it was seen as wasted
> > duplication of effort to address this in a "callback" class when
> > standard adapter classes were also in the pipe (i.e. boost::bind).
> I wouldn't class myself as an expert at these things, but I at least
> thought I had a reasonable idea, and I can't see how you can "trivially"
> convert a class, member function pair into a callback (at least on my
> totally broken MSVC compiler - no void return's, no partial
"Trivially" is an overoptimistic stance. :-)
BTW, MSVC 7.0b1 does support void returns; another pleasant surprise.
Take a look at the attached file for a preliminary 'bind' function. It only
supports member functions with zero or one arguments, and I haven't tested
it extensively, but it may help until 'the' boost::bind arrives.
The first form of 'bind' converts a member function pointer to a function
object that takes a pointer, a reference, or a boost::shared_ptr as its
The second form of 'bind' converts a member function pointer, object pointer
pair into a function object.
You must define the macros BOOST_NO_VOID_RETURNS and
BOOST_NO_PARTIAL_ORDERING depending on the compiler. When both are defined
(MSVC 6.0) you have to supply a dummy integer as a last parameter to bind;
use 1, or 5, or 42, or whatever you like, but not zero (it's also a
Here's a short example:
// #define BOOST_NO_VOID_RETURNS
void f() const
std::cout << "X(" << this << ")::f() const;\n";
std::cout << "X(" << this << ")::k();\n";
void g(int i)
std::cout << "X(" << this << ")::g(" << i << ");\n";
void h(int const & i)
std::cout << "X(" << this << ")::h(" << i << ");\n";
void q(int & i)
std::cout << "X(" << this << ")::q(" << i++ << ");\n";
-- 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