功能图 c

新手上路,请多包涵

我制作了一张功能图。所有这些函数都是无效的并且接收单个字符串参数。

代码:

 void f1(string params){...}
void f2(string params){...}
void f3(string params){...}

map<string , void*> funcMap;

funcMap["f1"] =(void*)&f1;
funcMap["f2"] =(void*)&f2;
funcMap["f3"] =(void*)&f3;

我如何调用函数?我尝试了下一个代码,但 id 不起作用:

 void (*func)(string) =  &funcMap[commandType];
func(commandParam);

我收到此错误消息:

 Server.cpp:160:46: error: cannot convert ‘void**’ to ‘void (*)(std::string) {aka void (*)(std::basic_string<char>)}’ in initialization

原文由 kakush 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 431
2 个回答
using pfunc = void (*)(string);

map<string, pfunc> funcMap;
funcMap["f1"] = f1; //and so forth

然后调用:

 pfunc f = funcMap[commandType];
(*f)(commandParam);

一般来说,为什么要抛弃类型安全?如果它是函数指针的映射,则将其声明为一个。

原文由 Seva Alekseyev 发布,翻译遵循 CC BY-SA 4.0 许可协议

&funcMap[commandType]

只需删除 & 。您的编译错误在这里很有用。它在右侧有一个 void** 这是因为您获取了函数指针的 _地址_。您不希望那里有两个间接级别。

原文由 djechlin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏