我想在運行時生成一個函數調用的參數列表,但我想不出在C++中完成此操作的方法。在運行時動態創建一個C++函數參數列表
這是我正在寫的幫助程序庫。我通過網絡從客戶端獲取輸入數據,並使用該數據調用用戶之前設置的函數指針。該函數需要一個字符串(類似於printf的標記)和不同數量的參數。我需要的是根據從客戶端接收到什麼數據添加更多參數的方法。
我存儲功能的map函數指針的
typedef void (*varying_args_fp)(string,...);
map<string,varying_args_fp> func_map;
一個例子用法是
void printall(string tokens, ...)
{
va_list a_list;
va_start(a_list, tokens);
for each(auto x in tokens)
{
if (x == 'i')
{
cout << "Int: " << va_arg(a_list, int) << ' ';
}
else if(x == 'c')
{
cout << "Char: " << va_arg(a_list, char) << ' ';
}
}
va_end(a_list);
}
func_map["printall"] = printall;
func_map["printall"]("iic",5,10,'x');
// prints "Int: 5 Int: 10 Char: x"
硬編碼函數調用和它的參數時,這工作得很好,但如果我已經收到數據「CreateX 10 20」,程序需要能夠自己調用參數。例如
// func_name = "CreateX", tokens = 'ii', first_arg = 10, second_arg = 20
func_map[func_name](tokens,first_arg,second_arg);
我無法預測用戶如何佈置功能並預先編寫代碼。
如果有人有另一種方式完成此任務的建議,請隨時提出建議。我需要用戶能夠將一個函數「綁定」到庫中,並且讓庫在從聯網客戶端接收到數據後稍後調用它,實質上是一種回調。
運行時間變化的參數是多少?不可能在C++ AFAIK中使用,否則將會非常糟糕。 (語法)問題不是接收它們,而是傳遞它們。儘管如此,彙編程序應該是可能的。在C++中,您寧願使用數據結構來存儲參數並傳遞此結構,如'std :: list'。我建議看一看boost.spirit –
dyp
這種傳遞可變數量參數的方式在C++中已棄用 –
這是我最初的想法,但如果一個函數使用兩種不同類型的參數,那麼我無法將它們存儲在一起。 – PudgePacket