使用constexpr进行可选配置



现在,我使用下面的东西来为"子项目"提供配置在我的代码中:

//_config.h
#ifndef _CONFIG_H
#define _CONFIG_H
#if defined(USE_CONFIG_H) && USE_CONFIG_H == 1
#include <config.h>
#endif
#ifndef CONFIG_OPTION_1
//Default value for CONFIG_OPTION_1 
#define CONFIG_OPTION_1 10
#endif
#ifndef CONFIG_OPTION_2
//Default value for CONFIG_OPTION_2
#define CONFIG_OPTION_2 20
#endif
#endif

这样我就可以在子项目中包含_config.h,使用配置值,并"覆盖"。如有必要,可以在编译时定义USE_CONFIG_H,并将config.h放在include路径中。

现在,我一直在尝试转换尽可能多的旧C风格代码,以利用c++中更安全的替代方案。其中之一是将使用宏定义的常量转换为constexpr值。例如

constexpr unsigned int CONFIG_OPTION_1 = 10;

我遇到的问题是,我如何复制与宏能够有条件地覆盖默认配置值相同的行为?

宏是进行条件编译的唯一方法,因此您不能完全摆脱它们。但是你可以使用宏来初始化一个变量:

constexpr unsigned int NON_MACRO_CONFIG_OPTION_1 = CONFIG_OPTION_1;

从而获得类型的好处。

最新更新