将此实例作为回调参数发送
Send this instance as callback parameter
我有一个简单的UI类,我需要将UI元素实例发送到每个元素的回调,这样我就可以(很像javascript中)操作调用回调的元素
这需要将this
的实例发送到注册为回调的函数。我该怎么做
当前状态:
class Opencv_Button {
private:
bool (*callback)(void*); //Callback WITHOUT the current button isntance
//bool(*callback)(Opencv_Button, void*); //this is CALLBACK I WANT instead
void* callback_param; //parameter set by user
bool state;
bool mouse(int, int, int);
public:
Opencv_Button(int, int, int, int);
void setCallback(bool(*)(void*), void*);
//void setCallback(bool(*)(Opencv_Button, void*), void*); //This is what I WANT TO USE
void draw(Mat*, bool);
void val(const char*);
char value[30];
};
现在,有一个函数调用回调:
bool Opencv_Button::mouse(int mx, int my, int button)
{
if(/*click conditions satisfied*/)
{
/*CLICK!!!*/
if(callback!=0)
callback(callback_param);
/*Instead I WANT:*/
//callback(*this/*some THIS instance*/, callback_param);
return true;
}
return false;
}
所以,我可以在回调中做这样的事情:
bool buttonCallback(Opencv_Button*but, void*param) {
but->val("I was clicked!!!");
}
您非常接近。快速解决方法是确保回调使用指针并传递this
:
bool (*callback)(Opencv_Button*, void*);
void setCallback(bool(*)(Opencv_Button*, void*), void*);
并呼叫:
callback(this, callback_param);
不过,您最好使用参考资料。您可以让您的函数参考Opencv_Button
:
bool (*callback)(Opencv_Button&, void*);
void setCallback(bool(*)(Opencv_Button&, void*), void*);
然后称之为:
callback(*this, callback_param);
你的buttonCallback
会是这样的:
bool buttonCallback(Opencv_Button& but, void* param) {
but.val("I was clicked!!!");
}
将回调定义为
bool (*callback)(Opencv_Button*, void*);
一切都很顺利。
相关文章:
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++存储带有可变参数的回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数
- 以特征类型作为参数的泛型函数回调
- C++模板函数中,指定回调函子/lambda 的参数类型,同时仍允许内联?
- 模板化回调参数的逆变,如 C# 中的逆变
- 带有参数的嵌入式系统上的最小c++回调
- 如何用不同的参数类型和数字回调函数
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- v8 源代码中 ArrayMap 函数的回调 fn 参数是什么?
- 如何将提升回调作为参数传递给方法?
- 为什么模板参数推导失败,std::函数回调的可变参数模板参数?
- 回调参数中的协方差C++
- OpenGL 调试 错误回调函数的 ID 参数是什么?
- 如何使用 c++11 函数回调声明多个模板参数
- sqlite3 更改函数回调参数 void* not用于 int* C++
- 如何使用C++函数指针作为指向 C 函数指针/回调的参数
- 如何在 Lua 回调中检测可选的第一个参数
- 如何在 Windows 上将成员函数作为与蓝牙相关的参数回调函数传递
- C++可变参数回调