首页 > 解决方案 > 在 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++

解决方案


在 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;
};

推荐阅读