#include<iostream>
#include<functional>
#include <memory>
using namespace std;
struct TesSt {
void update(const string &in_str) {
str = in_str;
std::cout << "str:" << str << endl;;
}
string str;
};
void normFun(){ printf("I am normFun\n");}
class ProgramA{
public:
void FunA2(){printf("I am FunA2\n");}
static void FunA3(){printf("I am FunA3\n");}
static void FunA2Wrapper(void *context){
((ProgramA*)context)->FunA2();
}
};
class ProgramB{
typedef std::function<void()> callbackFun;
public:
void FunB1(callbackFun callback){
callback();
}
};
class ProgramC{
public:
void FunC1(void (*callback)())
{
callback();
}
void FunC2(void(*callback)(void*),void* context)
{
callback(context);
}
};
TesSt g_test_st;
int main(int argc,char**argv)
{
auto func1 = bind(&TesSt::update,&g_test_st,"hihi");
func1();
auto func2 = bind(&TesSt::update,g_test_st,"aaa");
func2();
std::cout<< g_test_st.str << std::endl;
ProgramA pa;
ProgramC pc;
ProgramB pb;
pc.FunC1(normFun);//回调普通函数
pb.FunB1(ProgramA::FunA3);//回调类里静态函数
pb.FunB1(std::bind(&ProgramA::FunA2,&pa));//回调类里面的普通函数,但是非static函数只能使用static变量,不方便
pc.FunC2(ProgramA::FunA2Wrapper,&pa);//回调类里面的普通函数,将普通函数转化为另一个的static函数
return 1;
}
回调函数解析
于 2022-08-11 11:27:31 首次发布