幾種包含函式指標的結構體列表定義方式
阿新 • • 發佈:2019-02-02
最近做一個功能,用結構體包含函式指標來呼叫函式問題,有幾個問題挺有記錄價值
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}, };