我目前正在使用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':非静态成员函数的非法调用。非静态成员引用必须与特定对象相关。
答案 0 :(得分:2)
看到这个问题,我认为这几乎就是你想做的事情:
答案 1 :(得分:1)
你做不到。这就是std::function
的存在。您需要更改界面以使用std::function
,获得幸运并找到某种void* context
参数,或放弃。
答案 2 :(得分:0)
这是因为在调用该回调时,无法告诉(从编译器的POV)哪个this
指针应该传递给该函数。如果你真的想传入一个指针,你将不得不使用汇编。