gpt4 book ai didi

c++ - 将成员函数作为参数传递

转载 作者:行者123 更新时间:2023-11-30 02:14:33 28 4
gpt4 key购买 nike

我有一个运行回调的函数:

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 实现是虚拟的。

最佳答案

您正在做一些奇怪的 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 调用还存在。否则按值捕获它。


What is a lambda expression in C++11?

关于c++ - 将成员函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57642311/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com