所以我開始開發一個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