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

C++ best way to switch between configs

本文关键字:最佳 方式 配置 之间 C++      更新时间:2023-10-16

我有一些代码需要针对不同的情况运行。对于这些情况,我将不得不主要切换一些枚举和静态。所以,假设我有枚举

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
在我看来

,创建宏并使用#ifdef MACRONAME是在运行时之前检查事物的最佳方式。您还可以创建constexpr变量并使用 ifs 来计算这些变量的值。由于变量是constexpr的,编译器很可能会优化它们。

一种选择是创建单独的源文件,每个源文件都包含所需的枚举。 然后,创建不同的编译目标,这些目标将相关文件编译为生成的一部分。

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

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