簡體   English   中英

以字符串為參數的C ++調用函數

[英]C++ call function with string as parameter

可以說我有幾個函數,例如function1()function2() ,....., function1000()而我在函數中得到的字符串就是call_function(string function_name)
現在,我需要基於function_name執行function_name

我搜索了解決方案,發現可以使用地圖。

有沒有一種簡單的方法可以為1000個keys(string type)和各個函數創建映射?
例如: call_function(function541)然后它應該執行function541()

您可以使用map來為這些東西提供函數指針

void func1(const char *args)
{
     //....
}

void func2(const char *args)
{
     //....
}

typedef void (*function) (const char *args);

//......

std::map<std::string, function> func_map;

func_map.insert(std::pair<std::string, function>("func1", func1));
func_map.insert(std::pair<std::string, function>("func2", func2));

func_map["func1"]("arg1 arg2 arg3"); // Here is the func1 call

有沒有一種簡單的方法可以為1000個keys(string type)和各個函數創建映射?

例如: call_function(function541)然后它應該執行function541()

不,沒有簡單的方法,因為C ++沒有反射 函數名稱僅適用於編譯器。 在運行時,在執行程序時,源代碼中稱為function541與內存中存在的字符串"function541"之間沒有關系。

每個此類鏈接都必須手動建立:

std::map<std::string, std::function<void()>> map;
// ...
map["function541"] = function541;

當然,您仍然可以通過代碼生成來自動化此類任務。 像這樣的具有機械名稱的函數無論如何看起來都不像手動編寫的C ++代碼。 也就是說,您可以使用其他某種語言編寫腳本來創建C ++代碼,以將上千個功能添加到映射中,這可能是某種預構建步驟。

從運行時的角度來看,仍然沒有任何自動化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM