web-dev-qa-db-ja.com

非静的メンバー関数への参照を呼び出す必要があります

私はC++を使用しています(C++ 11ではありません)。クラス内の関数へのポインターを作成する必要があります。私は次のことをしようとします:

void MyClass::buttonClickedEvent( int buttonId ) {
    // I need to have an access to all members of MyClass's class
}

void MyClass::setEvent() {

    void ( *func ) ( int ); 
    func = buttonClickedEvent; // <-- Reference to non static member function must be called

}

setEvent();

ただし、「非静的メンバー関数への参照を呼び出す必要があります」というエラーがあります。 MyClassのメンバーへのポインターを作成するにはどうすればよいですか?

26
JavaRunner

問題は、buttonClickedEventがメンバー関数であり、それを呼び出すにはメンバーへのポインターが必要なことです。

これを試して:

void (MyClass::*func)(int);
func = &MyClass::buttonClickedEvent;

そして、それを呼び出すときに、MyClass型のオブジェクトが必要です。たとえば、this

(this->*func)(<argument>);

http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm

27
imreal

https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types 、特に[33.1]「ポインタからメンバー関数へ」の型は「ポインタから関数へ」と異なりますか?

9
xiaodong