参照:
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);
* */