2019-12-30 19:26发布
void testInt(int a){ printf("testInt a = %d " , a); } void testFloat(float a){ printf("testFloat a = %f " , a); } void run(){ void* funp; funp = testInt; (*(u32(*)())funp)(3); }
xiaoergao 发表于 2017-3-5 22:23 首先感谢您的回复 你提到的应用场景是在源程序里面这样使用是可以的。
最多设置5个标签!
如果你重载了256个函数,那你说的没错。无论你怎么折腾,都是避免不了的。
然而,办法还是有的,比如这样,C/C++通用,无论考虑各种条件,伪代码如下:
- typedef union{
- int Int[8];
- float Float[8];
- } CParam;
- static void test0(CParam p){ //8个参数全为int
- printf("testInt p = %d %d %d %d %d %d %d %d
" , p.Int[0], p.Int[1], p.Int[2], p.Int[3], ...);
- }
- static void test1(CParam p){ //8个参数:int int int int int int int float
- printf("testInt p = %f %d %d %d %d %d %d %d
" , p.Float[0], p.Int[1], p.Int[2], p.Int[3], ...);
- }
- ...
- typedef void(*pfnFun)(CParam);
- const pfnFun fnFuncs[] = {test0, test1, ...};
-
- void run(){
- int type = 0; // 获取参数样式
- CParam prm; // 参数列表,根据你的串口填充是int还是float
- char* param[8]; //从你的串口中分离出来的参数。最简单的方法:将逗号换成0x00就好了,然后填充下一个参数
- for(int i = 0; i<8; i++){
- if(strstr('.', param[i])){ //float
- prm.Float[i] = atof(param[i]);
- type |= 1 << i;
- } else
- prm.Int[i] = atoi(param[i]);
- }
- fnFuncs[type](prm);
- }
复制代码一周热门 更多>