类方法的回调(C ++)

时间:2011-11-26 01:56:19

标签: c++ callback

我有一个Button类。 单击此按钮时,将调用selected()方法。

//Button.cpp
void Button::selected(){
//Do Something
}

//Player.cpp
void Player::Jump(){
//Jump!
}

我也有一个Player类。 我想做到这一点,当我点击按钮时,播放器方法的跳转() 叫做。我想我可以将Player类与按钮链接起来。 但后来我意识到按钮类将有许多其他用途,而不是 让我的球员跳起来。 (即:菜单选择器?让玩家移动?等等)

所以我想考虑包含某种回调,但我对它们并不太熟悉,而且我无法理解我读过的一些教程。

有人可以告诉我如何使用selected()方法将任何函数/方法作为参数接受并在方法体中执行吗?

1 个答案:

答案 0 :(得分:1)

这是一种函子方法,您可以将函数作为参数传递:

template <typename functor_t>
void Button::selected(functor_t func){
  // ...
  func();
  // ...
}

参数可以是函数指针,也可以是函数对象:

 struct functor {
   void operator()() {
     // stuff
   }
 };

 void function() {
   // stuff
 }

使用指向成员的指针调用void method()

struct foo {
  void bar() {
    std::cout << "hello";
  }
};

template <typename class_t>
void function(class_t& c, void (class_t::* mp)()) {
  (c.*mp)();
}

foo x;
function(x, &foo::bar);