一个关于函数指针的问题,up有分! 我想用一个函数指针分别指向多种类型的函数,例如:声明一个指针 P 即可以指向一个函数 int A(int a , int b) 也可以指向另一个函数 char B(int a , int b , int c)可以做到吗,该如何做呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎么可能呢最起码 函数int A(int a,intb) 定义函数指针后面的参数是两个而 char B(int a,int b,int c) 定义函数指针后面的参数是三个这一点就解决不了难道重载 。。所以这个是做不到的 可以的。 按照下面的方法宣告:typedef 返回类型 (*类型名)(参数类型1,参数类型2, ... )例如: typedef int (funcptr) (int x, int y, ... );这样是可以的。 #include <stdio.h>int fun1(int x){ return x+100;}int fun2(int x,int y){ return x+y;}main(){ typedef int(*typefun1)(int); typedef int(*typefun2)(int,int); void *f; int x=100,y=200; int z,k; f=fun1; z=((typefun1)f)(x); f=fun2; k=((typefun2)f)(x,y); printf("z=%d,k=%d\n",z,k); return 0;}运行结果:z=200,k=300 sorry,掉了一个星号typedef int (*funcptr) (int x, int y, ... ); 我做过你想做的那种程序在我的程序中可以随时添加新的win32动态库,然后执行它们中的函数Sikao(有点意思) 说的沾边,但还有一点关键问题没有解决 请问 super_xxx , 是什么问题没有解决? 能否把你的方法show出来? 本人的意思见是像SiKao说的那样,只不返回类型用 void,的引用的时候,用(数据类型 *) function();//强制把它转为想要的类型.!这样参数问题 能得到解决,返回类型也能得到解决~! 本人的意思见是像SiKao说的那样,只不返回类型用 void,的引用的时候,用(数据类型 *) function();//强制把它转为想要的类型.!这样参数问题 能得到解决,返回类型也能得到解决~! blackmouse2002(binbin) 参数如何传递啊 Sikao(有点意思) 你定义如下结构 typedef int (funcptr) (int x, int y, ... );但是dll函数 int fun(int ,int ,char) 或者包含其他类型参数如何处理呢 super_xxx() 我就是想达到你说的意思,可以说详细一些吗,或者贴点代码出来?多谢了!Sikao(有点意思)用你的方法,我必须要先定义出所有的类型,这样就毫无意义了!因为我无法预期所有函数的返回类型和参数数量! super_xxx() 我就是想达到你说的意思,可以说详细一些吗,或者贴点代码出来?多谢了!Sikao(有点意思)用你的方法,我必须要先定义出所有的类型,这样就毫无意义了!因为我无法预期所有函数的返回类型和参数数量! 1、我的理解其实楼主的问题只是用一个指针去指向不同的函数,又何必在意这个指针是什么类型呢?只要调用的时候可以恢复就可以了亚。例如:void test(){ return;}void SomeFunc(){ void *pv; pv = (void*)test; //这步就把函数指针转成void*了 ((void (*)())pv)();//这步把pv打回原型了(调用的时候)}其余函数类型都可以此类推。2、我的问题其实我也有一个关于函数指针的问题,可是很少人回答,借着这里的人气,问一下,回答给分typedef void (ClassA::*FXN)(WPARAM wParam,LPARAM lParam);void ClassA::SomeFunc(FXN MyFunc,WPARAM wParam,LPARAM lParam){ MyFunc(wParam,lParam);}出现如下错误error C2064: term does not evaluate to a function为什么? VincintCao(Vincint) 当不传递参数时你的方法是正确的,当传递参数时,你试过吗 1、QUOTE"Super_XXX():VincintCao(Vincint) 当不传递参数时你的方法是正确的,当传递参数时,你试过吗"void test(int a){ return;}void main(){ void *pv; pv = (void*)test; //这步就把函数指针转成void*了 ((void (*)(int) )pv)(5);//这步把pv打回原型了(调用的时候)}2、我的第二个问题已经自己解决了,我已经将解决的方法贴到了自己提问的帖子上,有兴趣的可以去看看,因为全局函数的指针和成员函数的指针还是有一点区别的。 但是你要在程序中说明你的函数原型啊,和Sikao(有点意思) 的想法很类似现在是你的主程序不能动而你的dll中的函数可能改变,你只修改dll函数,不修改主程序 VincintCao(Vincint) 你的方法还是我得预先知道调用函数的原形,但关键是我无法预先知道super_xxx() 我加你qq了,等你在线时探讨一下,多谢了 socket中的这句话看不懂,求解释? 编译时出现"left operand must be l-value"是什么意思 怎么实现ComboBox以下的功能 请问为什么要用COleDateTime 求解VC中简单的问题? 高手请救救小弟:字符串与数组的转化 求救,我只有一天时间了!多线程用odbc的执行存储过程出错,告急! 用WISE怎么在桌面和快速启动栏加上快捷方式,怎么在程序组中加上反安装? 问一个VS开发平台路径的问题 中文输入法如何屏蔽掉 F1 键? 高分求教各路高手哥们:CPropertySheet的焦点问题 为什么下面的cpp程序会编译出错?
最起码 函数int A(int a,intb) 定义函数指针后面的参数是两个
而 char B(int a,int b,int c) 定义函数指针后面的参数是三个
这一点就解决不了
难道重载 。。
所以这个是做不到的
typedef int (funcptr) (int x, int y, ... );这样是可以的。
int fun1(int x)
{
return x+100;
}int fun2(int x,int y)
{
return x+y;
}main()
{
typedef int(*typefun1)(int);
typedef int(*typefun2)(int,int);
void *f; int x=100,y=200;
int z,k;
f=fun1;
z=((typefun1)f)(x);
f=fun2;
k=((typefun2)f)(x,y);
printf("z=%d,k=%d\n",z,k); return 0;
}
运行结果:
z=200,k=300
typedef int (*funcptr) (int x, int y, ... );
在我的程序中可以随时添加新的win32动态库,然后执行它们中的函数Sikao(有点意思)
说的沾边,但还有一点关键问题没有解决
像SiKao说的那样,只不返回类型用 void,
的引用的时候,用(数据类型 *) function();
//强制把它转为想要的类型.!
这样参数问题 能得到解决,返回类型也能得到解决~!
像SiKao说的那样,只不返回类型用 void,
的引用的时候,用(数据类型 *) function();
//强制把它转为想要的类型.!
这样参数问题 能得到解决,返回类型也能得到解决~!
参数如何传递啊
Sikao(有点意思)
你定义如下结构 typedef int (funcptr) (int x, int y, ... );
但是dll函数 int fun(int ,int ,char) 或者包含其他类型参数如何处理呢
我就是想达到你说的意思,可以说详细一些吗,或者贴点代码出来?多谢了!
Sikao(有点意思)
用你的方法,我必须要先定义出所有的类型,这样就毫无意义了!因为我无法预期所有函数的返回类型和参数数量!
我就是想达到你说的意思,可以说详细一些吗,或者贴点代码出来?多谢了!
Sikao(有点意思)
用你的方法,我必须要先定义出所有的类型,这样就毫无意义了!因为我无法预期所有函数的返回类型和参数数量!
其实楼主的问题只是用一个指针去指向不同的函数,又何必在意这个指针是什么类型呢?只要调用的时候可以恢复就可以了亚。例如:
void test()
{
return;
}
void SomeFunc()
{
void *pv;
pv = (void*)test; //这步就把函数指针转成void*了
((void (*)())pv)();//这步把pv打回原型了(调用的时候)
}
其余函数类型都可以此类推。
2、我的问题
其实我也有一个关于函数指针的问题,可是很少人回答,借着这里的人气,问一下,回答给分
typedef void (ClassA::*FXN)(WPARAM wParam,LPARAM lParam);
void ClassA::SomeFunc(FXN MyFunc,WPARAM wParam,LPARAM lParam)
{
MyFunc(wParam,lParam);
}
出现如下错误
error C2064: term does not evaluate to a function
为什么?
当不传递参数时你的方法是正确的,当传递参数时,你试过吗
QUOTE
"Super_XXX():
VincintCao(Vincint)
当不传递参数时你的方法是正确的,当传递参数时,你试过吗
"
void test(int a)
{
return;
}
void main()
{
void *pv;
pv = (void*)test; //这步就把函数指针转成void*了
((void (*)(int) )pv)(5);//这步把pv打回原型了(调用的时候)
}
2、我的第二个问题已经自己解决了,我已经将解决的方法贴到了自己提问的帖子上,有兴趣的可以去看看,因为全局函数的指针和成员函数的指针还是有一点区别的。
而你的dll中的函数可能改变,你只修改dll函数,不修改主程序
你的方法还是我得预先知道调用函数的原形,但关键是我无法预先知道super_xxx()
我加你qq了,等你在线时探讨一下,多谢了