有效地处理选项

时间:2017-07-11 18:17:24

标签: c++

我有一个功能,在典型的程序运行中执行了数亿次。此功能执行某个主要任务,但是,如果用户需要,它应该执行该主要任务的一些轻微变化。实现这一点的显而易见的方法是这样的:

mvn install -Plambda

但是,这不是很优雅,因为void f(bool do_option) { // Do the first part if (do_option) { // Optional extra code } // Continue normal execution } 的值在程序运行期间不会改变。 do_option语句经常被不必要地执行。

我通过将if转换为模板参数来解决它。我每次想要更改它时都会重新编译程序。现在,这个工作流程是可以接受的:我不​​经常更改这些选项,我是唯一的用户/开发人员。但是在将来,这两件事情都会改变,所以我想要一个带命令行开关的二进制文件。

问题是:处理这种情况的最佳或最优雅的方法是什么?我不介意拥有一个包含许多do_option副本的大型二进制文件。我可以从一组命令行参数创建一个映射到一个要执行的函数,或者可能使用一个开关。但是我不想手工维护这个地图 - 可能会有超过五个这样的参数。

顺便说一下,我知道有人会说我过早地进行了优化。这是正确的,我测试了它。在我的特定情况下,运行时f的性能并不比我的模板构建差。这并不意味着如果可能有更好的解决方案我就不感兴趣了。

1 个答案:

答案 0 :(得分:1)

在现代(非嵌入式)CPU上,分支预测器将足够智能以识别每次都采用相同的路径,因此if语句是一种完全可接受(且可读)的处理方式你的情况。

在嵌入式处理器上,编译器优化应足够智能,以消除if语句的大部分开销。

如果您真的很挑剔,可以使用前面提到的模板方法,并使用if语句选择要执行的函数版本。