C++回调函数

C++函数的回调

了解C++函数的回调的之前,首先必须了解 typedef 的使用;
typedef 的使用是给一个复杂的变量给一个简单易记的名字,本身不创建新的类型,另外简化一些复杂的类型声明;

1.给一个复杂的变量给一个简单易记的名字;

typedef char *pChar;
//本质就是代表 char *mystr;
pChar mystr;

2.简化一些复杂的类型声明;

//定义函数PrintHello
void A::PrintHello(int);
//声明函数指针ptrFunc;
typedef void (*ptrFunc)(int);

void A::PrintHello(int i){
//定义函数指针变量
ptrFunc ptr;
ptr=&PrintHello;
(*ptrFunc)(110);
}

进入正题:
回调的实质就是别人在运行函数时,通过传参的方式,调用你实现的函数;

#pragma once
#include 

typedef std::function mCallback;
typedef bool (*pFun)(int, int);


// 1.类成员函数
// 2.类静态函数
class TestClass
{
public:
	int ClassMember(int a) { return a; }
	static int StaticMember(int a) { return a; }
};

//仿函数
class funtor
{
public:
	void operator()(int a) {

	}
};
class typeOf
{
public:
	
	typeOf();
	~typeOf();
	
	bool pSort(int age1, int age2, pFun p);
	
	void pStar();
	void mMain();
};

头文件声明 几个类 便于后面的 使用;

//指针回调

//引入头文件pFun指针
bool typeOf::pSort(int age1, int age2, pFun p) {
	if (age1>age2)
	{
		return p(age1,age2);
	}
	return false;
}

bool CompareAge(int cAge, int cAge2) {

	return cAge > cAge2;
}


void typeOf::pStar() {
    //传入函数地址
	pFun pStrs= CompareAge;
	bool flag=pSort(2, 3, pStrs);
	
}


//指针数组;
void f1(char* s);
void f2(char* s);
typedef void (*Fp)(char*);

void f1(char* s) {
	std::cout << 1;
}

void f2(char* s) {
	std::cout << 1;
}


void ToFunc() {
	Fp f[] = {f1,f2};
	//获得数组第一位
	f[0];
}


typedef int(*mStr)(bool);

int mTest(bool flag) {
	std::cout << 22;
	return 2;
}

//std::function 


void typeOf::mMain() {
	mStr mMa = mTest;
	mMa(5);
	//回调普通函数
	mCallback mCall;
	mCall(5);
	//回调仿函数
	funtor fun;
	mCallback mFun;
	fun(7);
	//回调类的成员函数
	TestClass tc;
	mCallback mTc;
	mTc = std::bind(&TestClass::ClassMember, tc, std::placeholders::_1);
	mTc(5);
}

你可能感兴趣的:(C++)