【发布时间】:2017-09-25 13:25:09
【问题描述】:
编辑:(9 月 26 日)
对于触摸屏校准工具,我有一个 MT_Interface 类,它有一个成员函数Send_Touch_Event。每次调用此函数时,我都想从不同的类(Calibration_checker)运行一个名为“EventWrite”的回调函数。
在代码中,这些是感兴趣的函数(我想,我没有制作MT_Interface)。
class MT_Interface
{
void SetCallback( void (*cb)(MT_Interface_TouchEvent_Type), void* o ) {Callback_fct = cb; Callback_obj = o;};
void Send_Touch_Event(MT_Interface_Message_Type Message, int ID, int X, int Y, int Additional_Info1, int Additional_Info2);
{
// Does something and than uses the callback
(*Callback_fct)(touch_event, Callback_obj);
};
}
带有EventWrite函数的类可以概括为:
class Calibration_checker
{
MT_Interface *MT_Interface_object
EventWrite(MT_Interface_TouchEvent_Type t, void* o)
Configure()
{
// Configure the MT_Interface_object & set callback
MT_Interface_object->SetCallback(&Calibration_checker::EventWrite, (void*)this);
}
}
我认为这里要使用 SetCallBack 函数,但我无法让它工作。我不太明白我收到的错误信息。也许这里有人可以阐明这个问题?
不幸的是,当我应用下面建议的包装函数时,我得到了类似的错误。
Calibration_checker.cxx: In member function ‘void Calibration_checker::Configure()’:
Calibration_checker.cxx:83:81: error: no matching function for call to ‘MT_Interface::SetCallback(void (Calibration_checker::*)(MT_Interface_TouchEvent_Type, void*), void*)’
MT_Interface_object->SetCallback(&Calibration_checker::EventWrite, (void*)this);
^
In file included from Calibration_checker.hxx:4:0,
from Calibration_checker.cxx:4:
MT_Interface.hxx:163:12: note: candidate: void MT_Interface::SetCallback(void (*)(MT_Interface_TouchEvent_Type, void*), void*)
void SetCallback( void (*cb)(MT_Interface_TouchEvent_Type, void*), void* o ) {Callback_fct = cb; Callback_obj = o;};
^
MT_Interface.hxx:163:12: note: no known conversion for argument 1 from ‘void (Calibration_checker::*)(MT_Interface_TouchEvent_Type, void*)’ to ‘void (*)(MT_Interface_TouchEvent_Type, void*)’
【问题讨论】:
-
你能创建一个 lambda 并将其作为回调传递吗?然后你可以在那里捕获任何东西并执行你想要的任何代码。
-
简而言之:指向函数的指针是不够的,您还必须将引用/指针传递给对象(以显式方式作为参数或通过函子对象)来自相关列表:stackoverflow.com/questions/2298242/…