単純なUIクラスがあり、各要素のコールバックにUI要素インスタンスを送信する必要があるため、(javascriptの場合と同様に)コールバックを呼び出した要素を操作できます。
これには、のインスタンスをthis
コールバックとして登録された関数に送信する必要があります。それ、どうやったら出来るの?
現在の状態:
class Opencv_Button {
private:
bool (*callback)(void*); //Callback WITHOUT the current button isntance
//bool(*callback)(Opencv_Button, void*); //this is CALLBACK I WANT instead
void* callback_param; //parameter set by user
bool state;
bool mouse(int, int, int);
public:
Opencv_Button(int, int, int, int);
void setCallback(bool(*)(void*), void*);
//void setCallback(bool(*)(Opencv_Button, void*), void*); //This is what I WANT TO USE
void draw(Mat*, bool);
void val(const char*);
char value[30];
};
ここで、コールバックを呼び出す関数があります。
bool Opencv_Button::mouse(int mx, int my, int button)
{
if(/*click conditions satisfied*/)
{
/*CLICK!!!*/
if(callback!=0)
callback(callback_param);
/*Instead I WANT:*/
//callback(*this/*some THIS instance*/, callback_param);
return true;
}
return false;
}
だから、私はコールバックでこのようなことをすることができます:
bool buttonCallback(Opencv_Button*but, void*param) {
but->val("I was clicked!!!");
}