最近做一个功能,用结构体包含函数指针来调用函数问题,有几个问题挺有记录价值
1.普通实现
typedef struct
{
const BYTE* funcIndex;
const BYTE* funcName;
BYTE funcType;
void (*function)();
}testStruct_t;
extern void testFunc1(char* param1, int param2);
extern void testFunc2(char* param1, int param2);
extern void testFunc3(char* param1, int param2);
testStruct_t testList[] =
{
{NULL, "function1", 1, testFunc1},
{"A", "function2", 1, testFunc2},
{"B", "function3", 2, testFunc3},
};
2.指定函数类型实现
typedef void (*TEST_FUNCTION)(char* param1, int param2);
typedef struct
{
const BYTE* funcIndex;
const BYTE* funcName;
BYTE funcType;
TEST_FUNCTION function;
}testStruct_t;
extern void testFunc1(char* param1, int param2);
extern void testFunc2(char* param1, int param2);
extern void testFunc3(char* param1, int param2);
testStruct_t testList[] =
{
{NULL, "function1", 1, testFunc1},
{"A", "function2", 1, testFunc2},
{"B", "function3", 2, testFunc3},
};
3.指定函数类型后又用在类结构体中
struct _testStruct_t;
typedef void (*TEST_FUNCTION)(char* param1, struct _testStruct_t param2);
typedef struct
{
const BYTE* funcIndex;
const BYTE* funcName;
BYTE funcType;
TEST_FUNCTION function;
}testStruct_t;
extern void testFunc1(char* param1, testStruct_t param2);
extern void testFunc2(char* param1, testStruct_t param2);
extern void testFunc3(char* param1, testStruct_t param2);
testStruct_t testList[] =
{
{NULL, "function1", 1, testFunc1},
{"A", "function2", 1, testFunc2},
{"B", "function3", 2, testFunc3},
};