2012-03-01 86 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