69,371
社区成员
发帖
与我相关
我的任务
分享
enum {
C_ABC,
C_DEF,
C_GHT,
.........},
int (*func[43])(char* ,char* )={function1,function2,function3,.........};
(*func[C_ABC])(char* a,char* b);//这里面的C_ABC是枚举常量,怎么用解析的字符串来表示
typedef void(*EXEC)(char *, char *);
void fun1(char *s1, char *s2) {}
void fun2(char *s1, char *s2) {}
void fun3(char *s1, char *s2) {}
struct disp {
char *cmd;
EXEC fun;
} Disp[] = {
{"C_ABC", fun1},
{"C_DEF", fun2},
{"C_GHI", fun3},
};
int main(void)
{
int i;
char *cmd = "C_ABC";
for (i = 0; i < 3; i++)
{
if (0 == strcmp(Disp[i].cmd, cmd))
Disp[i].fun(); //这里还需传入合适的参数
}
return 0;
}
[/quote]
估计只能这样了。struct{char *code;int (*func)(char*,char*);} array[]={{"C_ABC",function1},{"C_DEF",function2},{"C_GHI",function3}};
然后用bsearch二分搜索。std::map<std::string, std::function<int(char*,char*)>>
typedef void (*EXEC)(char *);
void helloAbc(char *){}
struct disp{
char *cmd;
EXEC fun;
} Disp[]={
{ "ABC", helloAbc }
};
//codegen.c
// 输入一组字符串,比如
// aa ss ddd dd 33 dd
// 然后自动生成一个函数 int A(const char*);
// 实现A("aa")返回0 A("ss")返回1 依次类推
#include <stdio.h>
int main(int argc,char **argv) {
int i;
if (argc<2) {
printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);
return 1;
}
//printf("#include <string.h>\n");
printf("int A(const char *a) {\n");
for (i=0;i<argc-1;i++) {
printf(" if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);
}
printf(" return -1;\n");
printf("}\n");
return 0;
}
//C:\test\Debug>codegen.exe
//codegen.exe p1 [p2 ...] [>result.c]
//Generate code int A(const char *a); 0==A("p1") 1==A("p2") ...
//C:\test\Debug>codegen.exe aa ss ddd dd 33 dd
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//
//c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c
//
//c:\test\Debug>type result.c
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
// if (0==strcmp(a,"ddd")) return 2;
// if (0==strcmp(a,"dd")) return 3;
// if (0==strcmp(a,"33")) return 4;
// if (0==strcmp(a,"dd")) return 5;
// return -1;
//}
//