如何将非静态函数作为回调传递?

时间:2011-12-04 05:43:14

标签: c++ qt

我目前正在使用Qt和图形引擎,在QGLWidget实例的初始化期间,我需要将一些函数指针传递给我的引擎。

寻找回调的功能是:

virtual void Buffer::CreateCustom( byte* getsize, byte* makecurrent)

Qt提供makeCurrent function,但它既不是字节*也不是静态的。

我可以写一个像这样的小包装函数:

void _stdcall MakeCurrent(void)
{
    QGLContext::makeCurrent();
}

但它只能在GLWidget的一个实例中调用。我试图像这样创建一个类成员包装器函数:

void _stdcall LEWidget::leMakeCurrent(void)
{
    makeCurrent();
}

但是你只能在静态成员函数上提供函数指针。如果我这样做,我会收到以下错误:

错误C2352:'QGLWidget :: makeCurrent':非静态成员函数的非法调用。非静态成员引用必须与特定对象相关。

3 个答案:

答案 0 :(得分:2)

看到这个问题,我认为这几乎就是你想做的事情:

How do I implement a callback in C++?

答案 1 :(得分:1)

你做不到。这就是std::function的存在。您需要更改界面以使用std::function,获得幸运并找到某种void* context参数,或放弃。

答案 2 :(得分:0)

这是因为在调用该回调时,无法告诉(从编译器的POV)哪个this指针应该传递给该函数。如果你真的想传入一个指针,你将不得不使用汇编。