读书人

用字符串调用同名的函数,该如何处理

发布时间: 2012-03-24 14:00:46 作者: rapoo

用字符串调用同名的函数
有三个函数
void fun1(XXXXXX);
void fun2(XXXXXX);
void fun3(XXXXXX);
现在我通过处理得到一个字符串,设为:fun2
我如何用API直接调用函数fun2(XXXXXX)呢?

[解决办法]
字符串调函数?
这个说法不太好,字符串就是字符串,函数是一个地址

你可以搞一个映射
typedef void (*func)();
typedef map <string , func> funcmap;
[解决办法]
我觉得你这个问题是要求元数据了。似乎需要一套反射库才能很好的解决。
[解决办法]
去年做过一段时间。好象有个叫reflect的C++库(笔记本坏了,信息都没了...),成熟度很高的。大致是用gcc的扩展(gcc-xml??),编译出一个.lib,连进执行文件。就可以使用那套库了。写那套库的好象是做核研究的,严谨性没问题。google上g一下吧。

另外,c++0x原先好象有计划把反射库纳入新标准的。后来似乎没戏了。真想有套非侵入式的C++反射库呀!
[解决办法]
str.def:
my_Macro(func1),
my_Macro(func2)

str.h:
#pragma once
void func1();
void func2();
#define my_Macro(a) a
typedef void (*func)();
func fArray[]=
{
#include "str.def "
};
#undef my_Macro
#define my_Macro(a) #a
char* str[]=
{
#include "str.def "
};

str.cpp:
#include "str.h "
#include "string.h "

void func1(){}
void func2(){}

void main()
{
char call[]= "func1 ";
intlen=sizeof(fArray)/sizeof(fArray[0]);
for(int i=0; i <len; i++)
{
if(strcmp(str[i],call)==0)
{
fArray[i]();
break;
}
}
}

读书人网 >C++

热点推荐