静的コールバック関数を必要とする外部ライブラリに対してプログラミングしています。コールバックを静的なものとして宣言しましたが、このコールバックで変更したいオブジェクトプロパティへのアクセスが緩くなりました。静的メソッドからのオブジェクトのアクセスプロパティ
.h
static void selCallback(void* userData, SoPath* selPath);
.cpp
void MyClass::selCallback(void* userData, SoPath* selPath) {
classProperty = 3;
}
現在のオブジェクトのプロパティにアクセスできるうちに静的コールバックを作成する方法はありますか?私が使用するライブラリはopenInventorライブラリです。通常、ライブラリオブジェクトを作成するとき、またはコールバックを登録するときvoid* userData
はどちらか、指定することができますいくつかの場所がある
SoSelection *selNode = new SoSelection;
selNode->addSelectionCallback(MyClass::selCallback);
は 'userData'は、この目的のために予約されてもよいです。チェックするには 'MyClass * obj = static_cast(userData)'を実行すると、 'obj- classProperty'へのアクセス権が与えられます。コールバック関数の呼び出しを調べて、オブジェクトが渡されたかどうか、どのように渡されるかを知る必要があります。 –
Franck
_私は現在のオブジェクトのプロパティにアクセスできるように静的なコールバックを作成する方法はありますか?_まあ..静的なコンテキストから非静的なプロパティ/メソッドにアクセスすることができない理由です。静的メソッド/プロパティはクラスのすべてのインスタンスに共通であり、何百ものインスタンスが作成されることがあります。だから、どのようにして決定するのですか、現在のオブジェクト_は静的コンテキストから何ですか?これは通常、オブジェクトへのポインタを静的メソッドに渡すことです。次に、関心のあるオブジェクトのプロパティにアクセスできます。 –