gpt4 book ai didi

C++、仿函数、特定任务/场景、将用户输入映射到函数

转载 作者:太空狗 更新时间:2023-10-29 20:30:34 25 4
gpt4 key购买 nike

我已经知道仿函数的基础知识,它们是如何创建的等等。我现在有一个特定的代码,可能会从转换为仿函数中受益:

这是关于控制台输入的。如果用户输入文本并按下回车键,它会尝试将输入的文本作为命令执行。目前可用的命令存储在 std::map<std::string, (void*)(std::string)> 中其中 map.first 是命令的名称,map.second 是指向包含此命令代码的函数的指针。

如果我现在将其转换为仿函数,最好的方法是什么?我会简单地用实际的仿函数对象替换函数指针吗?还是删除 map 并使用命令字符串 (commandFunctor("command")) 简单地调用仿函数?如果是第二个:这样的仿函数最好是什么样子的?我是否应该只创建一个仿函数类并在它的 operator() 中放置一个 if-else-if-else... 检查命令并将代码存储到其中?

或者我应该为每个命令创建一个新的仿函数类并调用与该命令对应的仿函数?

所以,简而言之:用户输入命令。查找命令。如果命令存在,则执行其代码。如何使用仿函数以最有效的方式做到这一点?

最佳答案

我建议使用 std::map<std::string, boost::function<void(std::string)> > .或者,如果您有权访问 C++0x 标准库,则可以使用 std::function而不是 boost::function .

A boost/std::function是一个可调用对象,可以存储任何 可以用您指定的函数类型调用的对象。所以用户可以给你一个函数指针,一个他们创建的类型的仿函数,甚至是一个 boost/std::bind。进行功能组合的对象。

关于C++、仿函数、特定任务/场景、将用户输入映射到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6607803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com