I have a function that runs a callback:
void run_callback(void(*callback)(uint32_t)) {
    callback(100);
}
This works with static functions,
void global_callback(uint32_t);
int main() {
    run_callback(global_callback);
}
but not with member functions.
class A {
    int x;
  public:
    void callback(uint32_t);
};
int main() {
    A foo;
    run_callback(foo.callback);
}
I work around this with a static wrapper function.
void run_member_callback(void* obj, void(*callback)(void*,uint32_t)) {
    callback(obj, 100);
}
class B {
    int x;
  public:
    static void static_callback(void* obj, uint32_t value) {
        static_cast<B*>(obj)->callback(value);
    }
    void callback(uint32_t);
};
int main() {
    B foo;
    run_member_callback(&foo, foo.static_callback);
}
Is there a simple way to pass a member function as an argument?
edit:
I'm trying to avoid STL, and templates aren't an option since my implementation of run_callback is virtual.
 
    