0

静的コールバック関数を必要とする外部ライブラリに対してプログラミングしています。コールバックを静的として宣言しましたが、このコールバックで変更したいオブジェクト プロパティへのアクセスが失われました。

.h
static void selCallback(void* userData, SoPath* selPath);

.cpp
void MyClass::selCallback(void* userData, SoPath* selPath) {
    classProperty = 3;
}

現在のオブジェクト プロパティにアクセスしながら静的コールバックを作成する方法はありますか? 私が使用するライブラリは openInventor ライブラリです。コールバックの接続は、次のコードで行われます。

SoSelection *selNode = new SoSelection;
selNode->addSelectionCallback(MyClass::selCallback);
4

2 に答える 2

1

addSelectionCallbackメソッドには、ポインタのオプション パラメータがありuserDataます。そこで、オブジェクト インスタンスを送信する必要があります。これは、コールバックで受信します。

メソッド内で、正しいオブジェクト型に型キャストし、オブジェクト インスタンスで実際の作業を行うことができます。

例えば:

void MyClass::selCallback(void* userData, SoPath* selPath) {
    static_cast<MyClass *>(userData)->classProperty = 3;
}

MyClass myInstance;
selNode->addSelectionCallback(MyClass::selCallback, &myInstance);
于 2016-11-14T13:20:20.040 に答える