菜鸟笔记
提升您的技术认知

c 反射机制-ag真人游戏

1、什么是反射?
通过字符串函数名称来实现函数的调用就是反射。
2、如何实现?
使用map,key为string保存函数名称,val为函数指针。

但是因为map初始化时必须制定key,val的类型,如果我们想使用一个map来实现各种不同参数列表的函数反射就无能为力了。

因此可以借助于模板来使用一个map来实现各种不同参数列表的函数反射。参考rpc原理剖析。

map不直接存需要被反射的函数指针,而是存一个我们制定的模板函数指针,把需要被反射的函数指针作为我们指定模板函数的一个参数。

比如我们使用一个map来实现下面两个不同参数列表的函数反射。
void foo1(int);
float foo2(float);
首先指定一个模板函数
template
void call(f fun,serializer*ds,char*data,int len){
  
	//需要在借助于一个函数来解析f类型
	callproxy(fun,ds,data,len);
}
template
void callproxy(std::functionfun){
  
	//使用tuple从data得到参数列表args
	r = std::invoke(fun,args);
	把r放入到ds序列化返回值
}
map>handler;
template
void bind(string name,f fun){
  
	handler[name]=std::bind(call ,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3);
}
//如何调用
准备好传入传出参数。
serializer *ds = new serializer();
char * data;
int len;
handlers["foo1"](ds,data,len);
网站地图