以下代码有什么问题?
下面的parseCounter1()和parseCounter1()是两个函数
我把他们的指针放在const OptionValueStruct
中,这样就可以了
当option_values []的每个元素都可以相应地调用它们
经历了:
typedef struct OptionValueStruct{
char counter_name[OPTION_LINE_SIZE];
int* counter_func;
} OptionValueStruct_t;
const OptionValueStruct option_values[] = {
{"Counter1", (*parseCounter1)(char*, char**)},
{"Counter2", (*parseCounter2)(char*, char**)},
};
const OptionValueStruct *option = NULL;
for(int i = 0; i< sizeof(option_values)/sizeof(OptionValueStruct_t); i++){
option = option_values + i ;
result = option->counter_func(opt_name, opt_val);
}
答案 0 :(得分:8)
您已将counter_func
成员声明为指向int的指针,而不是函数指针,而您在option values
中有类似于函数指针声明的内容。这是你想要的(假设你的返回类型是int)
typedef struct OptionValueStruct{
char counter_name[OPTION_LINE_SIZE];
int (*counter_func)(char*, char**);
} OptionValueStruct_t;
const OptionValueStruct_t option_values[] = {
{"Counter1", parseCounter1},
{"Counter2", parseCounter2},
};
for(int i = 0; i< sizeof(option_values)/sizeof(OptionValueStruct_t); i++){
result = option_values[i]->counter_func(opt_name, opt_val);
// don't know what you relly want to do with result further on..
}
答案 1 :(得分:0)
如果您正在编译为C代码(正如您的代码所示),那么您应该将option_values[]
和option
的类型更改为OptionValueStruct_t
。但是,在C ++中,这没关系。
或者,您可以从自定义类型名称中删除尾随_t
。