2012-03-01 88 views
2

函数指针I程序的壳。具有不同参数

我有不同的参数,不同的功能。

void func1(void); 
void func2(char * x,); 
void func3(char * x, string y); 

此刻使用地图来存储字符串和指针。

typedef map<string,void (*)()> t_list; 
map<string,void(*)()>::iterator it; 
t_list list; 

list["argument1"]=&func1; 

找到并开始我使用的功能:

it=list.find("argument"); 
if(it != list.end()) 
{ 
if->second(); 
} 

是否可以存储所有功能与地图中不同的参数?如何?

+2

您打算如何调用这些功能呢?你是否期望能够检查他们的实际签名并与提供的参数进行匹配? – 2012-03-01 08:30:17

回答

1

壳合理的解决方案可以是一个函数,它接受字符串矢量,并返回错误代码。所以这条签名:

int (*func)(std::vector<std::string> const &args) 

然后在您需要分析的参数,你可以调用真正的实现(例如void func3(char * x, string y);

+0

或也许INT(\ * FUNC)(INT的argc,炭\ * argv的[]); =) – wreckgar23 2012-03-01 15:09:56

+0

@ wreckgar23:不,绝对不是。这将是非常不安全的。 – 2012-03-01 16:18:37

0

你为什么不使用仿函数的功能?他们更容易使用,他们更OOP link

+0

可能因为这不会解决他的问题。即使函子需要有一个定义的签名,如果你想存储在地图中。 – 2012-03-01 08:49:58

+0

但是,您可以使用虚拟函数,然后将参数作为单独的结构传递。这应该能解决问题,对吗? – neciu 2012-03-01 08:53:22