私は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