Boost logo

Boost Users :

Subject: [Boost-users] Boost::bind member function and save to function pointer
From: David McCallum (dmccallum9_at_[hidden])
Date: 2011-04-13 19:08:06

I'd like to implement an event-handling scheme that supports member
functions. For example, I would have a class that accepts a function
pointer, stores it, and calls that function when some event occurs.
I'd like to be able to store a pointer to a member function with

void staticReceiver(std::string message)
    cout << message << endl;

void ChatClient::memberReceiver(std::string message)
    cout << message << endl;

void ChatClient::testBind(void)
    void (*funcPointer)(std::string message);

    boost::bind(&ChatClient::memberReceiver, this, _1)("Bind works");

    funcPointer = staticReceiver;
    (*funcPointer) ("Function pointer works");

    //##### THIS LINE WILL NOT COMPILE #####
    funcPointer = boost::bind(&ChatClient::memberReceiver, this, _1);

However, I get the following compiler error:

g++ -DHAVE_CONFIG_H -I. -I./libdasyne/lowlevel -I/opt/boost/include
-D_REENTRANT -Wall -g -O2 -MT ChatClient.o -MD -MP -MF
.deps/ChatClient.Tpo -c -o ChatClient.o `test -f
'examples/ChatClient.cpp' || echo './'`examples/ChatClient.cpp
examples/ChatClient.cpp: In member function ‘void ChatClient::testBind()’:
examples/ChatClient.cpp:56: error: cannot convert
‘boost::_bi::bind_t<void, boost::_mfi::mf1<void, ChatClient,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >
>, boost::_bi::list2<boost::_bi::value<ChatClient*>, boost::arg<1> >
>’ to ‘void (*)(std::string)’ in assignment
make: *** [ChatClient.o] Error 1

Can it be done? Thanks in advance.

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at