回调函数

2023-02-05 0 762

参照:

c++ 反弹表达式示例_曹昆的控制技术网志-CSDN网志_c++反弹表达式

C词汇反弹表达式通识科_张ruxiang的网志-CSDN网志

一、式子如下表所示:

//表述反弹表达式

void PrintfText()

{

printf(“Hello World!\n”);

}

//表述同时实现反弹表达式的”调用表达式”

void CallPrintfText(void (*callfuct)())

{

callfuct();

}

//同时实现表达式反弹

int main(int argc,char* argv[])

{

CallPrintfText(PrintfText);

return 0;

}

二、C词汇示例:

#include

void PrintNum(int n);

void ShowNum(int n, void (* ptr)());

void PrintMessage1();

void PrintMessage2();

void PrintMessage3();

void ShowMessage(void (* ptr)());

int main()

{

ShowNum(11111, PrintNum);

ShowNum(22222, PrintNum);

ShowMessage(PrintMessage1);

ShowMessage(PrintMessage2);

ShowMessage(PrintMessage3);

}

void PrintNum(int n)

{

printf(“Test1 is called, the number is %d\n”, n);

}

void ShowNum(int n, void (* ptr)())

{

(* ptr)(n);

}

void PrintMessage1()

{

printf(“This is the message 1!\n”);

}

void PrintMessage2()

{

printf(“This is the message 2!\n”);

}

void PrintMessage3()

{

printf(“This is the message 2!\n”);

}

void ShowMessage(void (* ptr)())

{

(*ptr)();

}

输出:

Test1 is called, the number is 11111

Test1 is called, the number is 22222

This is the message 1!

This is the message 2!

This is the message 2!

三、C++示例:

#include

using namespace std;

// 表达式指针,定义一个表达式指针的原型,名称为lpFunc,三个参数:void指针、char *、int

typedef void(lpFunc)(void *, char *, int);

// 调用反弹表达式的宿主表达式,参数callback是原型名称为lpFunc的表达式指针

void GetCallBack(void *lpVoid, lpFunc callback, char *name, int age)

{

// 执行反弹表达式callback,其实是调用通过形参callback实际传过来的表达式Callback

callback(lpVoid, name, age);

}

class A{

public:

A(){};

void outName(char szAlarm[], int age) {

printf(“My name is %s, %d years old\n”, szAlarm, age);

}

// 表述一个类A的静态成员表达式fCallback

static void fCallback(void *lpVoid, char szAlarm[], int age) {

// 类A呃成员表达式中,使用类A表述一个对象指针p 指向传进来的指针参数lpVoid,强制类型转换为: A*

A *p = (A*)(lpVoid);

p->outName(szAlarm, age);

}

// A的成员表达式Test

void Test() {

// 在类A的成员表达式Test中调用外部表达式GetCallBack,将类A的静态成员表达式fCallback名称传给第二个参数,同时实现fCallback表达式的反弹

GetCallBack(this, fCallback, “kevin”, 38);

}

};

int main()

{

A a;

a.Test();

}

输出:My name is kevin, 38 years old

/**

* 总结,想要使用反弹表达式

* 1、首先要表述一个表达式指针的原型,例如:typedef void(*lpFunc)(void *, char *, int);

* 2、要表述一个或者已存在和这个表达式指针原型相符合的表达式,例如:static void fCallback(void *lpVoid, char szAlarm[], int age);

* 3、要有调用反弹表达式的宿主表达式,例如:void GetCallBack(void *lpVoid, lpFunc callback, char *name, int age);

* 4、宿主表达式去调用反弹表达式,例如:GetCallBack(this, fCallback, “Kevin, 38);

* */

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务