当前位置: 代码迷 >> 综合 >> C、C++类实现的回调
  详细解决方案

C、C++类实现的回调

热度:87   发布时间:2024-02-07 09:10:45.0

回调函数其实就是对函数指针的应用,要求用户按照相程序员规定的函数指针类型来世实现定义的函数。

1、第一种方式 c语言中实现回调

#include<iostream>
#include<Windows.h>
using namespace std;

//用户不可见
int(*pc)(int a, int b);

/*
由用户实现 回调函数
允许用户自定义实现的函数由用户按照函数指
针参数类型返回值 函数内部细节有自己实现 
*/
int  Callback(int a, int b)
{
cout<< a + b<<endl;
return 1;
}

 //实现用户不可见
void register_callBack(int(*tmp)(int a, int b))
{
pc = tmp;
}

 //用户不可见
void _call()
{
//调用函数指针
pc(3,5);
}

int main(void)
{
//用户调用
register_callBack(Callback);

    //用户不可见
while (1)
{
_call();
Sleep(1000);
}
return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

第二 c++类之间的回调

//全局的函数指针
typedef void(*CallBackPtr)(int, int);//定义一个回调函数类型指针

//回调类
class CallBack
{
public:
CallBack();
virtual ~CallBack();

    //用户实现的函数回调函数
static void RecvClass(int a, int b);
};

CallBack::CallBack()
{

}
CallBack:: ~CallBack()
{

}

//用户实现的函数回调函数
void CallBack::RecvClass(int a, int b)
{
cout << "回调~~~!!!!"<<"    "<<a + b << endl;
}

//注册回调类

class MyRegister
{
public:
MyRegister();
virtual ~MyRegister();

    //注册回调
void SetRegisterCallback(CallBackPtr ptr);

    void Run();

    CallBackPtr _p;
};

MyRegister::MyRegister()
{
}


MyRegister::~MyRegister()
{
}

void MyRegister::SetRegisterCallback(CallBackPtr ptr)
{
_p= ptr;
}

void MyRegister::Run()
{
while (true)
{
Sleep(2000);
_p(3, 6);
}
}

 

//调用


int main(void)
{
MyRegister registers;
CallBack call;
registers.SetRegisterCallback(call.RecvClass);
registers.Run();

return 0;
}

 

 

  相关解决方案