これを使用しstd::bind
てクラス外の関数をバインドし、奇妙な動作をします。
プライベートメンバー変数の値をいくらか制御します。
//MClass.h
typedef std::function<void(void)> Action;
class MClass {
public:
Action OnLeftClick;
//some other functions here
private:
int totalContents;
VScrollbar* _vscrollbar;
};
//MClass.cpp
この種の実装では、バグは発生しません。
MClass::MClasss() {
OnLefClick = std::bind(&VScrollbar::Scrolldown, this);
}
//but when I do this
//otherfile.h
MClass mclass;
void clickBar() {
mclass.totalContents = 0;
}
void InitComponentns() {
mclass.OnLeftClick = std::bind(clickBar, mclass);
}
OnLeftClick()
そして、それに割り当てられた関数を呼び出すときはいつでもclickBar()
、の値はtotalContents
0に変更されません(totalContents値はMClassの他の関数によって増分されます)。
私はここで何か間違ったことをしていますか?