[英]Call Java function with parameter Map<String, String> from c++ with std::map<std::string, std::string>
[英]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.