问个函数指针的问题
假设有一个函数指针
void (*a)(char*);
有一个函数
void b(int n)
{
}
有没有办法实现执行a("10")时转换成执行b(10)?
函数指针是别人的库里面的 我不能改。
[解决办法]
你没说清楚~
[解决办法]
中间加一个函数 做参数类型转换
[解决办法]
// 假设有一个函数指针
// void (*a)(char*);
// 有一个函数
// void b(int n)
// {
// }
// 有没有办法实现执行a("10")时转换成执行b(10)?
#include <stdio.h>
void (*a)(char*);
void b(int n)
{
printf("in b:n==%d\n",n);
}
void A(char *pA)
{
int pB;
sscanf(pA,"%d",&pB);
b(pB);
}
int main() {
a=A;
a("10");
}
//in b:n==10
[解决办法]
不太明白你的问题,你是说函数指针a是库定义的一个钩子,你需要自己提供,但是你的函数都是用int作为形参?
这样的话,你的函数为什么不写成char*做输入呢。
如果说两边都不是你的,你都动不了。
也可以,有好多办法可以想。
你可以了解一下C++11标准里的lambda函数。你可以在传入的时候写一个局部lambda函数完成参数的转换。即使你有多个函数,你可以把这个lambda函数写成一个宏,这样就不用在每次函数转换的时候写整个lambda的表达式了。
另外,你也可以利用你现有的b函数定义一堆参数一致的b'函数。
这就是机械的函数定义,但是有办法能够简化很多。比如说函数的形参变化都差不多,你可以定义一个宏,这样每一个新函数用一个宏来定义,就只有一行代码。
另外,你可以批量将所有函数编程函数对象,然后在内部对他们的参数进行多态处理,同样用宏来减少代码量。
参看C++11标准的lambda函数,boost 库bind包,会启发你的思路。
[解决办法]
哦,你还可以定义一个从int到char*的默认转换函数,让函数参数能默认转换类型。不过这样比较危险。不建议使用。即使使用,用命名空间或者局部作用域限制起来。