以字符串作为参数的c++调用函数
C++ call function with string as parameter
假设我有几个函数,如function1()
, function2()
, ....., function1000()
我在一个函数中得到一个字符串,比如call_function(string function_name)
。
现在我需要执行基于function_name
的函数。
我寻找解决方案,发现我可以使用地图。
是否有任何简单的方法来创建一个地图,让1000 keys(string type)
和各自的功能?
如:call_function(function541)
,则执行function541()
;
可以使用map to function指针来表示这些
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
不,没有简单的方法,因为 c++没有反射。函数名只存在于编译器中。在运行时,源代码中称为是否有任何简单的方法来创建一个地图,让1000
keys(string type)
和各自的功能?如:
call_function(function541)
那么它应该执行function541()
;
function541
的函数与程序执行时内存中存在的字符串"function541"
之间没有关系。
每一个这样的链接必须手动建立:
std::map<std::string, std::function<void()>> map;
// ...
map["function541"] = function541;
当然,您仍然可以通过代码生成自动执行这样的任务。具有这样机械名称的函数看起来不像手工编写的c++代码。也就是说,你可以用其他语言编写一个脚本,创建c++代码,将这一千个函数添加到映射中,也许是作为某种预构建步骤。
但是,从运行时的角度来看,没有任何自动化。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 函数何时会在c++中包含stack_Unwind_Resume调用