从类方法回调(C++)
问题描述:
我有一个Button类。 当我点击这个按钮时,它被选中()方法被调用。从类方法回调(C++)
//Button.cpp
void Button::selected(){
//Do Something
}
//Player.cpp
void Player::Jump(){
//Jump!
}
我也有一个播放器类。 我想这样做,当我点击按钮时,播放器方法的跳转() 被调用。我想我可以将播放器类与按钮连接起来。 但后来我意识到,按钮类将有许多其他用途,而不是让我的玩家跳跃 。 (即:菜单选择器?使播放器移动?等)
所以我想包括某种回调,但我不太熟悉他们,我无法理解一些教程我已阅读。
有人能告诉我如何使用selected()方法将任何函数/方法作为参数并在方法体中执行它?
答
在这里你将一个函数作为参数仿函数的方法:
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);
对于大多数情况,我们有'std :: function'和'std :: bind'。 –