现在的位置: 首页 > 综合 > 正文

猜想根据函数名调用相应函数

2018年02月08日 ⁄ 综合 ⁄ 共 1000字 ⁄ 字号 评论关闭

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:目前为猜想,尚未验证。
 

抱歉!评论已关闭.