You cannot, at least it won’t be only a pointer to a function.
Member functions are common for all instances of this class. All member functions have the implicit (first) parameter, this
. In order to call a member function for a specific instance you need a pointer to this member function and this instance.
class Some_class
{
public:
void some_function() {}
};
int main()
{
typedef void (Some_class::*Some_fnc_ptr)();
Some_fnc_ptr fnc_ptr = &Some_class::some_function;
Some_class sc;
(sc.*fnc_ptr)();
return 0;
}
More info here in C++ FAQ
Using Boost this can look like (C++11 provides similar functionality):
#include <boost/bind.hpp>
#include <boost/function.hpp>
boost::function<void(Some_class*)> fnc_ptr = boost::bind(&Some_class::some_function, _1);
Some_class sc;
fnc_ptr(&sc);
C++11’s lambdas:
#include <functional>
Some_class sc;
auto f = [&sc]() { sc.some_function(); };
f();
// or
auto f1 = [](Some_class& sc) { sc.some_function(); };
f1(sc);