![](/img/trans.png)
[英]How can I make a function pointer that points to functions with different number of arguments?
[英]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_start
, va_arg
, va_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.