1. 程式人生 > >幾種包含函式指標的結構體列表定義方式

幾種包含函式指標的結構體列表定義方式

最近做一個功能,用結構體包含函式指標來呼叫函式問題,有幾個問題挺有記錄價值

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},
};