在C ++中实现回调

时间:2020-06-09 21:57:03

标签: 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);

所以我能够抓住课堂之外的所有价值。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

在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;
};
相关问题