繁体   English   中英

我可以将函数作为参数传递,并且该函数可以包含不同的参数吗?

[英]Can I pass functions as parameter and the function can hold different arguments?

目前,我以这种方式调用函数:

typedef struct OptionValueStruct{  
    const char *option_name;    
    int (*func)(char*, char**);    
} OptionValueStruct_t;  


int parse2parameter(char *opt_name, char** opt_val);  
int parse3parameter(char *opt_name, char** opt_val, int a);


const OptionValueStruct_t option_values[] = {  
{"Counter1", parse2parameter}  
};  

其中parse2parameter是一个func(),它有2个参数,在OptionValueStruct_t中定义。
我怎么可能用

const OptionValueStruct_t option_values[] = {  
{"Counter1", parse2parameter},  
{"Counter2", parse3parameter}  
};  

parse2parameter()和parse3parameter()具有不同数量/类型的参数?

您真正想做什么,为什么?

考虑一下接收函数指针的代码。 您将如何知道该如何称呼它?

看看va_startva_argva_end 你不会受到两个和三个论点的限制。

您可以只使用int(*)() ,并使用其他一些描述函数签名的参数来调用它。 例如:

typedef struct OptionValueStruct{
    const char *option_name;
    int (*func)(); /* actually takes some arguments */
    unsigned num_args; /* might need more fields to describe the args */
} OptionValueStruct_t;

...

switch (value.num_args){
case 2: ((int (*)(char*, char**))value.func)(opt_name, opt_val);
case 3: ((int (*)(char*, char**, int))value.func)(opt_name, opt_val, a);
}

另一种方法是只声明指针func以匹配parse3parameter ,然后总是将其称为三个参数,并且(在某些平台上),第三个参数将被忽略。 但是,这可能不是便携式的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM