C ++在配置之间切换的最佳方式

时间:2017-04-12 01:15:41

标签: c++

我有一些代码需要针对不同的情况运行。对于那些情况,我将不得不切换一些枚举和静态。所以,让我们说我有枚举

enum class City { NY, LA, W_DC, ... }
City capital = City::W_DC

和其他情况

enum class City { LDN, BMH, EDB, ... }
City capital = City::LDN

假设我有很多这些枚举,那么重用大部分代码并在这些配置之间切换的最佳方法是什么。要明确的是,这并不意味着在运行时发生,程序应该针对一个案例进行编译而忽略其他任何事情。

编辑:在StackOverflowUser之后使用宏

将不同的枚举配置存储在不同的命名空间中然后执行

是一种很好的方法
#IFDEF USE_NAMESPACE_A
    using namespace namespace_a
#ELSE
    using namespace namespace_a
#ENDIF

2 个答案:

答案 0 :(得分:0)

在我看来,创建宏并使用#ifdef MACRONAME是在运行时检查事物的最佳方法。 您还可以创建constexpr变量并使用ifs来评估这些变量'值。由于变量是constexpr,编译器很可能会将它们优化掉。

答案 1 :(得分:0)

一个选项是创建单独的源文件,每个文件包含您想要的枚举。然后创建不同的编译目标,将编译相关文件作为构建的一部分。

另一种选择是使用前面所述的#ifdef ... #other预处理器宏,但是你可能有不同的编译目标来定义包含正确文件的宏。而不是设置它,所以你必须更改代码并更改构建,只需将它放在构建中。

但是,说实话,枚举可能不是做你想做的事情的最佳方式。在运行时从文件/数据库/或其他一些数据源进行查找可能是一种更易于维护的方法。它显然需要更多的工作,但如果这是长期保持的东西,你以后会感谢自己。