使用 constexpr 进行可选配置
Use constexpr for optional configuration
现在,我使用类似下面的东西为我的代码中的“子项目”提供配置:
//_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
在包含路径中。
现在,我一直在尝试转换尽可能多的旧 C 风格代码,以利用 C++ 中更安全的替代方案。其中之一是将使用宏定义的常量转换为 constexpr 值。例如
constexpr unsigned int CONFIG_OPTION_1 = 10;
我遇到的问题是,如何复制能够有条件地覆盖默认配置值的宏的相同行为?
宏是进行条件编译的唯一方法,所以你不能完全摆脱它们。但是你可以使用宏来初始化一个变量:
constexpr unsigned int NON_MACRO_CONFIG_OPTION_1 = CONFIG_OPTION_1;
从而获得类型的好处。
现在,我使用类似下面的东西为我的代码中的“子项目”提供配置:
//_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
在包含路径中。
现在,我一直在尝试转换尽可能多的旧 C 风格代码,以利用 C++ 中更安全的替代方案。其中之一是将使用宏定义的常量转换为 constexpr 值。例如
constexpr unsigned int CONFIG_OPTION_1 = 10;
我遇到的问题是,如何复制能够有条件地覆盖默认配置值的宏的相同行为?
宏是进行条件编译的唯一方法,所以你不能完全摆脱它们。但是你可以使用宏来初始化一个变量:
constexpr unsigned int NON_MACRO_CONFIG_OPTION_1 = CONFIG_OPTION_1;
从而获得类型的好处。