类方法的回调(c++)
Callbacks from a class method (C++)
我有一个Button类。当我点击这个按钮时,它的selected()方法被调用。
//Button.cpp
void Button::selected(){
//Do Something
}
//Player.cpp
void Player::Jump(){
//Jump!
}
我也有一个Player类。我希望当我点击按钮时,播放器方法的Jump()被称为。我想我可以把Player类和按钮链接起来。但后来我意识到按钮类还有很多其他用途,而不是只是让我的球员跳起来。(例如:菜单选择器?让玩家移动?等)
所以我在考虑包括某种回调,但是我对它们不太熟悉,而且我在理解我读过的一些教程时遇到了麻烦。
有人能告诉我如何使用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::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- 如何使用 Node-addon-API 实现 node-nan 回调
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 访问类C++ C 样式回调
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 在C++中实现回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数