函数指针寻址具有多个参数的函数

时间:2014-01-16 12:44:21

标签: c++ c pointers function-pointers

是否有任何可能的函数指针用于寻址具有相同返回类型的不同参数的函数,如果没有任何替代将有帮助...提前感谢

示例:

struct method
{
    char *name;
    void (*ptr)(?);  //? : what to define as arguments for this
};

void fun1(char *name)
{
    printf("name %s\n\r",name);
}
void fun2(char *name, int a)
{
    printf("name %s %d\n\r",name,a);
}

//defined before main()
method def[]=
{
    {"fun1",fun1},
    {"fun2",fun2}
}
//some where in main()
//call for function pointer
def[1].ptr("try", 2);

3 个答案:

答案 0 :(得分:0)

在C中,您可以将函数指针声明读为

void (*ptr)(); 

这意味着'指向函数的指针返回void并期望一个未指定数量的argments。'

通过调整,您的示例程序按预期工作。然而,很可能你在这里冒险进入未定义的(或至少是实施定义的)土地 - 我不确定并且我不是语言律师(但是有很多语言律师经常光顾SO,所以我相信有人可以提出标准的相关部分或证明没有标准。所以也许你应该使用

/* Here be dragons! */
void (*ptr)();

代替。

答案 1 :(得分:0)

解决方案#1:

void fun1(char *name, ...);
void fun2(char *name, ...);

解决方案#2:

method def[]=
{
    {"fun1",printf},
    {"fun2",printf}
}

答案 2 :(得分:0)

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 *,...)那样。