【问题标题】:C++: How do I pass a pointer to a member function of another class?C++:如何将指针传递给另一个类的成员函数?
【发布时间】:2014-08-01 11:18:25
【问题描述】:

当我想将指针传递给classB 的成员函数时,函数Foo() fo 类classA 的签名必须如何查看? 函数update() 在实例classB 上被调用,并被传递给classA 的对象。在update() 内部,classA 的函数Foo() 应传递一个指向回调函数的指针。该函数是classB 的成员。 我不能在这里做任何静态的东西。有没有办法做到这一点,也许是 boost::function

代码:

class classA
{
 public:
  voif Foo(/*a pointer to a memberfunction of ClassB*/)
};

class classB
{
 classB(){nVal = 0;}
 int nVal;
 public:
 void increment(int n){nVal += n;}
 void update(classA objA)
 {
  objA.Foo(increment)
 }
};

【问题讨论】:

  • 使用继承和虚函数。这就是为什么存在这种机制的原因。
  • 您可能想了解std::functionstd::bind
  • @JoachimPileborg:谢谢。我不知道 std::function 和 std::bind。
  • @barakmanos:在上述情况下,当classAclassB 类型明显不同并且classA 中的Foo() 只是引用一些可调用?

标签: c++ callback function-pointers boost-function


【解决方案1】:

您可以将boost::bindboost::function 一起使用。

class classA
{
public:
   void Foo(const boost::function<void(int)>& function)
   {
   }
};

class classB
{
public:
   //
   void update(classA objA)
   {
       objA.Foo(boost::bind(&classB::increment, this, _1));
   }
};

【讨论】:

  • 谢谢,完成了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2012-08-01
  • 1970-01-01
相关资源
最近更新 更多