C,Functors,特定任务/场景,将用户输入映射到函数
作者:互联网
我已经了解了有关仿函数的基础知识,它们是如何创建的等等.我现在有一个特定的代码可能会从转换为仿函数中受益:
这是一个控制台输入.如果用户输入文本并按Enter键,则尝试将输入的文本作为命令执行.目前可用的命令存储在std :: map< std :: string,(void *)(std :: string)>其中map.first是命令的名称,map.second是指向包含此命令代码的函数的指针.
如果我现在将其转换为仿函数,那么最好的方法是什么?我会简单地用实际的函子对象替换函数指针吗?或者删除地图,只需使用命令字符串(commandFunctor(“command”))调用仿函数?
如果第二个:这样的仿函数应该是什么样的最佳方式?我是否应该只创建一个仿函数类,并在其中的operator()中放置一个if-else-if-else …检查命令并将代码存储到其中?
或者我应该为每个命令创建一个新的仿函数类并调用与此命令对应的仿函数?
简而言之:用户输入命令.查找命令.如果存在comnmand,则执行其代码.如何使用仿函数以最有效的方式执行此操作?
解决方法:
我建议使用std :: map< std :: string,boost :: function< void(std :: string)>取代.或者,如果您可以访问C 0x标准库,则可以使用std :: function而不是boost :: function.
boost / std :: function是一个可调用对象,可以存储可以使用您指定的函数类型调用的任何内容.因此,用户可以为您提供一个函数指针,一个他们创建的类型的仿函数,甚至是一个执行函数组合的boost / std :: bind对象.
标签:c,function,console,pointers,functor 来源: https://codeday.me/bug/20190826/1734856.html