c++ - 有什么比分析单个 if 语句负载更好的方式来分析大量情况?

标签 c++

我正在开发一个解析器来处理数百个可能的命令,其中一些有自己的子命令。我有一个分词器将命令提取到一个对象中,但从那里我只有一个非常长的 if 语句列表,用于检查每个单独的情况。

是否有更好或更有效的方法来检查每个个案而不是 100 多个指定的 if 语句?

例如,命令可以是:A,CONFIG,SET,GARBLE,5。这将开始将乱码的配置设置为 5。但这不同于 A、CONFIG、SET、JAM、5 或其他命令,如 P、DO、ACTION,它本身完全是另一个命令。

现在我的程序用单独的 if 语句涵盖了所有这些情况,但我觉得它真的很低效。如果你是最后一个命令,那么无论如何你都会花费最长的时间。有没有更好、更实用的方法来做到这一点?

如果您需要代码示例,它真的像听起来一样简单。在获得充满标记化命令的对象后,我进行了一次绝对巨大的检查,它在哪里单独寻找像 if (command == "P") 之类的东西启动到 P 命令的命令处理程序中。

最佳答案

根据您的命令的复杂程度,这可能是“真正的”解析器的工作,可以是手动递归下降解析器,也可以是使用 lexx 和 yacc 等工具构建的解析器。

或者,如果这对您的用例来说太过分了,您可以使用函数指针或命令对象的哈希表,在表中查找命令并调用对象上的函数或方法来处理它。在我看来,这比一堆 if 语句更易于维护。

关于c++ - 有什么比分析单个 if 语句负载更好的方式来分析大量情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995738/

相关文章:

c++ - 在执行二进制序列化时删除 stringstream 结果的 const-ness 是否安全?

静态变量导致的 C++ 内存泄漏

c++ - 快速等效于 STK 中引用的 DSP 的 sin()

c++ - 将非类型参数模板化为静态成员函数

C++ 入门第 5 版。 : using sort on a vector of pointers is it undefined?

c++ - 为依赖类型特化 std::hash<T>

c++ - 如何消除程序中的链接器错误?

c++ - 开始 pty 询问登录凭据

c++ - 创建指针时没有调用构造函数吗?

c++ - 使用Visual Studio在C++中将负常量转换为无符号类型错误如何解决