1 定义一个可动态增长的数据变量比如链表,哈系表等
struct _Node{
char* szFuncName;
指定类型函数指针 Func;
};
缺点:只能存放一种参数类型的函数指针
参数类型1:func(int pos,void *result,int ,int)
可变参数: func(int ,...)
解决步骤1:将第一个参数pos设为标志,后续参数以此为准取得
可变参数:func(int *pos,...)
解决步骤2:将pos设为参数格式,可以将返回值与参数均放入...中
可变参数:typedef void (*funcPtr)(char *FuncName,char *fmt,...)
可以定义:
struct _FuncNode{
string szFuncName;
funcPtr FuncPtr;
};
2 每次往后追加函数关键字与函数指针
目标函数:
void Func1(int a,int b);
void Func1(int a,int b,int c);
void Func1Ptr(char *fmt,...) //a.add只添加该函数
{
//解析szInputType 取得参数类型int input1,int input2,int input3与函数个数resultCount
getInput(fmt,input1,input2,input3,resultCount);
if(resultCount == 3)
Func1(input1,input2,input3);
else
Func1(input1,input2);
}
FuncNode.szFuncName="Func1";
FuncNode.FuncPtr=Func1Ptr;
a.add("Func1",FuncNode);
3 每次访问时,均根据关键字索引数据。
假设调用为
test Func1 "%d %d %d" 1 2 3
//取得参数与个数。
szFuncName:Func1
szInputType:"%d %d %d"
input1:1
input2:2
input3:3
//执行函数
void FindFuncAndRun(char szFuncName,char fmt,...)
if(a.GetAt(i).szFuncName==szFuncName)
{
(*a.GetAt(i).FuncPtr)(fmt,input1,input2,input3);
}
ps:目前为猜想,尚未验证。