作为参数传递的函数可以调用另一个类的方法吗?

时间:2017-07-26 17:22:29

标签: c++

我有一些课 - class1。它有一个成员函数fun1和fun2,它获取一个函数fun3作为参数的指针。 是否可以通过fun3传递的方式调用fun1(也是公共的)来从外部调用fun2(fun2是公共的)?

我的意思是这样的:

    class class1
{
public:
    void fun1();
    void fun2( void(*fun3)() );

};

void fun3()
{
    fun1();
}

class1 a;
a.fun2( &fun1 );

我知道上面的代码不会起作用,但也许可以用不同的方式来实现。

1 个答案:

答案 0 :(得分:2)

  

是否可以通过fun2作为参数调用fun2(也是公开的)传递的方式从外部(fun3公开)调用fun1

当然,只要fun3可以接受指向class1类型的对象的指针/引用。

class class1
{
   public:
      void fun1() {}

      // Change the function type that can be
      // passed to fun2
      void fun2( void(*f)(class1& obj) )
      {
         f(*this);
      }

};

// Change fun3 to accept a reference to an object of type class1
void fun3(class1& obj)
{
   obj.fun1();
}

int main()
{
   class1 a;
   a.fun2( &fun3 );
}