我有一个Button类。 单击此按钮时,将调用selected()方法。
//Button.cpp
void Button::selected(){
//Do Something
}
//Player.cpp
void Player::Jump(){
//Jump!
}
我也有一个Player类。 我想做到这一点,当我点击按钮时,播放器方法的跳转() 叫做。我想我可以将Player类与按钮链接起来。 但后来我意识到按钮类将有许多其他用途,而不是 让我的球员跳起来。 (即:菜单选择器?让玩家移动?等等)
所以我想考虑包含某种回调,但我对它们并不太熟悉,而且我无法理解我读过的一些教程。
有人可以告诉我如何使用selected()方法将任何函数/方法作为参数接受并在方法体中执行吗?
答案 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);