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); }
shark 发表于 2017-3-5 16:28 C++要求函数指针的参数必须匹配。 void run(){ void* funp;
xiaoergao 发表于 2017-3-5 17:06 这样是可以 但是我希望是在运行的过程中判断串口发过来的数据是否带有小数点 如果有小数点我就转换了 ...
xiaoergao 发表于 2017-3-5 17:29 您指的是用泛型的概念么?刚才搜索到这个 正在学习.
最多设置5个标签!
void run(){
void* funp;
funp = testFloat;
(*(u32(*)(float))funp)(3);
funp = testInt;
(*(u32(*)(int))funp)(3);
}
这样就行了。
这样是可以 但是我希望是在运行的过程中判断串口发过来的数据是否带有小数点 如果有小数点我就转换了以后按照浮点数传参数.如果没有小数点转换后按照整形传.
如果只是一个参数还好 可以判断 但是如果好多个参数的话 就会有很多种组合.
用template 啊
都改用C++了,就别纠结这些有的没的了。这些是C程序需要考虑的事情。
直接函数重载,不折腾,乱七八糟的事情让编译器头疼去。要是编译器抱怨参数有歧义,就在前面加强制转换。
- void test(int a){
- printf("testInt a = %d
" , a);
- }
- void test(float a){
- printf("testFloat a = %f
" , a);
- }
- void run(){
- test(3); // 如果编译器抱怨了,就用test((int)3)
- test(3.0);
- }
复制代码那你可以都转成f再计算,最后加个0.1再取整。
一周热门 更多>