2
4

3 回答 3

5

以下是如何使用指向函数成员的指针的示例:

class A_t {
public:
    void func(int);
    void func2(int);
    void func3(int);
    void func4(int);
    ...
};

typedef  void (A_t::*fnPtr)(int);


int process(A_t& o, fnPtr p, int x)
{
    return ((o).*(p))(x);
}

int main()
{
    fnPtr p = &A_t::func;
    A_t a;
    process( a, p, 1 );
    ...
}

在主函数中,您可以使用func成员函数以及func2,func3func4

于 2013-07-11T20:59:14.780 回答
1

function() 必须声明为静态才能使其工作。如果您将非静态成员函数放入类中,则它与该类的特定实例相关联。

于 2013-07-11T20:43:10.137 回答
1

如果你想定义一个可以映射 C 函数和 C++ 成员函数的 API,定义如下过程,并使用绑定来传递成员函数...。

注意:未经测试(我在我的手机上!)

 class A {
 public:
     void func(int);
     static void StaticWrapper(A* ptr, int i)
     { ptr->func(i);}
...
};

 typedef  void (CStyleCB*)(int);


  int process( CStyleCB p, int x)
  {
      return (*p)(x);
  }

  int main()
  {
      A a;
      process( bind(&A::StaticWrapper, this, _1),   1 );
       ...
    }
于 2013-07-11T21:44:21.660 回答