簡體   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