我有一个运行回调的函数:
void run_callback(void(*callback)(uint32_t)) {
callback(100);
}
这适用于静态函数,
void global_callback(uint32_t);
int main() {
run_callback(global_callback);
}
但没有成员函数。
class A {
int x;
public:
void callback(uint32_t);
};
int main() {
A foo;
run_callback(foo.callback);
}
我使用静态包装函数来解决此问题。
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);
}
有没有简单的方法可以将成员函数作为参数传递?
编辑:
我正在尝试避免使用STL,并且由于我的run_callback
的实现是虚拟的,因此无法选择模板。
答案 0 :(得分:3)
您正在做一些奇怪的C类事情。使用C ++功能。我个人将使用run_callback
的模板和lambda来传递成员函数:
template <class F>
void run_callback(F callback)
{
callback(100);
}
class A
{
int x;
public:
void callback(uint32_t);
};
int main()
{
A foo{};
run_callback([&](uint32_t a) { return foo.callback(a); });
}
如果您通过引用捕获对象,请当心run_callback
调用之后。否则按值捕获它。