1

重複の可能性:
void(U::*)(void) とはどういう意味ですか?

次の点を考慮してください。

template <class T>
class myButtoncb  {
   private:
      T *ptr;
      void (T::*cback) (void)
}

私が理解していることは次のとおりです。

void (*cback) (void)

これは、void を返し、引数を取らない関数への関数ポインタに他なりません。

私が理解していないのは、の重要性はT::何ですか? like だけ宣言するだけで十分ではありませんvoid (*cback) (void)か?

4

3 に答える 3

2

thisこれは、ポインターを持つメンバー関数であることを示しています。それ以外の場合、それは自由な関数になり、操作対象のオブジェクトがわからず、非静的メンバー関数またはメンバー変数にアクセスできなくなります。

于 2012-10-11T06:58:08.730 に答える
1

C++FAQから

「pointer-to-member-function」のタイプは「pointer-to-function」とは異なりますか?

うん。

私があなたに提供したリンクには、このトピックに関する多くの情報があります。

于 2012-10-11T07:00:52.410 に答える
0

そこで渡す関数は、クラスT(myButtoncbのテンプレートパラメーター)内で宣言する必要があります。したがって、次のような関数を使用できます。

class A
{
public:
     void foo(void);
};


myButton<A> b;
b.cback = &A::foo;
于 2012-10-11T07:01:40.203 に答える