不兼容的函数指针



我正在用B instanceB;在a类(这是QMainWindow)的方法中创建类B的实例,然后用B.method()调用B的方法,并将a的方法的函数指针传递给它。

现在编译器显示argument of type "void (A::*)()" is incompatible with parameter of type "void (*)()"。如果可能的话,我该如何解决这个问题?

代码:

void A::method1_of_A(void)
{
B instanceB;
B.methodB(method2_of_A); // this is where the compiler complains
}

参数void (*)()只能接受自由函数

如果你有参数std::function<void()>,它可以调用任何可调用的,所以你可以调整你的成员函数与lambda捕获对象,并传递

B.methodB([&a](){ a.method2_of_A(); })

或将成员函数绑定到对象(包括)

B.methodB(std::bind(&A::method2_of_A, a))

当然,最明确的意图是在@John的注释中,你知道a的成员函数是预期的:

void methodB(void (A::*function)()) { (this->*function)(); }

相关内容

  • 没有找到相关文章

最新更新