指针是否有可能使用相同返回类型的不同参数编号对函数进行寻址,如果没有任何替代参数会有所帮助.. 提前致谢
例:
struct method
{
char *name;
void (*ptr)(?); //? : what to define as arguments for this
};
void fun1(char *name)
{
printf("name %snr",name);
}
void fun2(char *name, int a)
{
printf("name %s %dnr",name,a);
}
//defined before main()
method def[]=
{
{"fun1",fun1},
{"fun2",fun2}
}
//some where in main()
//call for function pointer
def[1].ptr("try", 2);
typedef void (*myfunc)(char *,int);
struct method
{
char *name;
myfunc ptr;
};
method def[]=
{
//we store fun1 as myfun
//type void(char*,int) and use it this way
{"fun1",(myfunc)fun1},
{"fun2",fun2}
};
从理论上讲,这是未定义的行为,但实际上它应该适用于大多数平台
* 编辑 -> 这适用于所有平台,就像 printf(const char*,...) 一样。
在 C 中,你可以让你的函数指针声明读取
void (*ptr)();
这意味着"指向返回 void 并期望未指定数量的参数的函数的指针"。
通过这种调整,您的示例程序可以按我的预期工作。然而,很可能你在这里冒险进入未定义(或至少是实现定义的)领域 - 我不确定,我不是语言律师(但是有很多语言律师经常光顾SO,所以我相信有人可以鞭策标准的相关部分或证明没有)。所以也许你应该宁愿使用
/* Here be dragons! */
void (*ptr)();
相反。
解决方案 #1:
void fun1(char *name, ...);
void fun2(char *name, ...);
解决方案#2:
method def[]=
{
{"fun1",printf},
{"fun2",printf}
}