c++ - 在 C++ 中实现回调
问题描述
我希望能够实现一个函数,该函数将由类中的另一个函数调用,例如回调。
例如,我们有这个原型:
using func = void(__stdcall*)(int val);
然后我在一个类中定义它:
func * _func;
然后我在主文件中实现它:
void __stdcall my_func(int val) { }
...
int main() {
...
myclass._func = &my_func;
然后,从另一个函数中,我称之为:
myclass::func_call() {
...
int a = 0;
this._func(a);
所以我能够捕捉到课堂之外的每一个价值。
我怎么能这样做?
解决方案
在 C++ 中执行此操作的本机和惯用方式是虚函数:
//using func = void(__stdcall*)(int val);
struct Interface
{
virtual void func(int val) = 0;
};
然后我在一个类中定义它:
//func * _func;
class Implementation : public Interface
{
void func(int val) final;
};
然后我在主文件中实现它:
class Client
{
public:
Client(Interface &interface) : interface(interface) {}
void func_call()
{
int a = 0;
interface.func(a);
}
private:
Interface &interface;
};
推荐阅读
- javascript - 在不使用 addEventListener 的情况下在外部单击时隐藏 div
- java - Error: 'cannot find symbol class GetTokenResult' after adding latest firebase-messaging dependency
- sockets - bind() 返回 EINVAL
- python - 从 scipy.ndimage.labels 结果中删除计数低的标签
- php - 为什么有两个输入被发送到数据库而不是一个?
- r - 我有一份 grobs 清单。如何制作 glist 或 gtree?
- c++ - 如何在数组中间构造开始和结束迭代器?
- c# - Bool 参数不会通过脚本改变,动画不会播放 OnClick
- javascript - 加载页面上的所有图像并等待完成
- c++ - 如果在 C++17 中“删除”或“未声明”移动/复制构造函数/赋值,是否已确定?