所以我开始开发一个OpenCV程序,事情是我不知道这段代码在整个上下文中做了什么。以下是整个代码的抽象版本。这个回调函数做什么?
class foo{
private:
friend void callBack(void *param);
void draw(void);
public:
void func(void);
void update(void);
}
void callBack(void *param){
foo *context = static_cast<foo*>(param);
if(context){
context->draw();
}
}
foo::foo(std::string windowName){
cv::namedWindow(windowName, frameSize.width, frameSize.height);
cv::resizeWindow(windowName, frameSize.width, frameSize.height);
cv::setOpenGlContext(windowName);
cv::setOpenGlDrawCallback(windowName, callBack, this);
}
void foo::func(void){
cv::updateWindow(m_windowName);
}
void draw(void){
//implementation shows here!!
}
您不必在此解释所有代码。我需要知道的是静态铸造发生的部分。它有什么作用?为什么一个实现代码的人这样写呢?
这是与C库回调机制接口的常用模式。回调用指向用户数据的指针(在这种情况下是对象指针)注册 –
我知道回调函数是什么,它是如何工作的。我想问的是他们使用static_cast param的原因。这是否会创建新类并替换已存在的类? –
Windforces