我有一些代码需要针对不同的情况运行。对于那些情况,我将不得不切换一些枚举和静态。所以,让我们说我有枚举
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
答案 0 :(得分:0)
在我看来,创建宏并使用#ifdef MACRONAME
是在运行时检查事物的最佳方法。
您还可以创建constexpr
变量并使用ifs来评估这些变量'值。由于变量是constexpr
,编译器很可能会将它们优化掉。
答案 1 :(得分:0)
一个选项是创建单独的源文件,每个文件包含您想要的枚举。然后创建不同的编译目标,将编译相关文件作为构建的一部分。
另一种选择是使用前面所述的#ifdef ... #other预处理器宏,但是你可能有不同的编译目标来定义包含正确文件的宏。而不是设置它,所以你必须更改代码并更改构建,只需将它放在构建中。
但是,说实话,枚举可能不是做你想做的事情的最佳方式。在运行时从文件/数据库/或其他一些数据源进行查找可能是一种更易于维护的方法。它显然需要更多的工作,但如果这是长期保持的东西,你以后会感谢自己。