首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问个函数指针的有关问题

2013-01-21 
问个函数指针的问题假设有一个函数指针void (*a)(char*)有一个函数void b(int n){}有没有办法实现执行a(

问个函数指针的问题
假设有一个函数指针
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*的默认转换函数,让函数参数能默认转换类型。不过这样比较危险。不建议使用。即使使用,用命名空间或者局部作用域限制起来。

热点排行