Since std::function
can hold member functions, so it must store a pointer to the object instance somewhere.
How can I fetch the this
pointer from a std::function
that holds a member function?
Since std::function
can hold member functions, so it must store a pointer to the object instance somewhere.
How can I fetch the this
pointer from a std::function
that holds a member function?
An object of type std::function
holds a callable object. A pointer to member function is a kind of callable object; it can be called with an argument of the appropriate class type, plus any additional arguments that it needs. For example:
struct S {
void f(int);
};
std::function<void(S, int)> g(&S::f);
To call it, pass an object of type S
:
S s;
g(s, 3);
Note that the std::function
object does not hold an S
object; it's only when you call it that the function pointer gets bound to an object.
You can wrap the std::function template in a functionally similar template, but one that exposes the functions you want (like sorting by address or whatever else)
See Stroika Function Template for an example implementation.
It works just like std::function (and lets you retrieve the aggregated std::function), but also keeps extra info to allow sorting and so on (handy to store the function pointers in a map and have object identity to later remove them).