how to remove function that bound to member function of this object :
std::vector<std::function<void(int)>> callbacks;
class MyClass {
public:
MyClass() {
callbacks.push_back(
std::bind(&MyClass::myFunc,this,std::placeholders::_1)
);
}
~MyClass() {
auto it = std::remove_if( std::begin(callbacks),
std::end(callbacks),
[&](std::function<void(int)>& f) {
return // <-- this is my question
// true (remove) if f is bound to member function
// of this
});
callbacks.erase(it,std::end(callbacks));
}
void myFunc(int param){...}
};
You can’t in the general case without a buttload of extra work. Type erasure clears this information from the object, and
std::functiondoes not expose this information directly.Your specific example may only have one member function that could be the candidate to remove, but what about a class with 5 members that could be stored as callbacks? You’ll need to test for all of them, and it’s also possible to bind member functions using a lambda, which is pretty much undetectable.
Here’s one solution if:
MyClassLive example on Ideone.