【发布时间】:2020-05-29 17:26:39
【问题描述】:
我正在编写一个库,它需要进行一些编译时间计算,并构建一个编译时间常量数组。问题是我需要一种方法来指定这个数组的最大大小......我知道的唯一方法是让它成为传递给编译器的可配置选项。
然后您可以将它与预处理器指令一起使用,例如:
#ifndef MAX_SIZE
constexpr auto maxSize = 42; // Some default value if no MAX_SIZE is specified
#else
constexpr auto maxSize = MAX_SIZE;
#endif
要设置使用 gcc 编译时的最大大小,可以使用选项-DMAX_SIZE=<desired_size> 编译代码。
我遇到的问题是它涉及使用预处理器宏从编译器获取MAX_SIZE 参数。预处理器宏被认为是邪恶的原因有很多(我不会在这里讨论,因为这不是问题的重点)。
有什么方法可以在不使用预处理器宏的情况下实现此功能? (我有多达 C++20 可用,因此请随意使用您的解决方案 -- 大部分情况下,其中一些尚未由 gcc 10 实现)
【问题讨论】:
-
预处理器宏被认为是邪恶的它们只有在不用于它们预期的工作时才是邪恶的,例如
goto。这对他们来说是一个完美的用例。 -
你可以有一个头文件
config.h或类似的,你可以在其中设置例如直接maxSize。 -
通常不会给出例外,因为它的“新手”正在询问并且他们不需要了解“高级”例外。说永远不要使用它更容易,然后一旦他们真的有一个案例,让他们询问是否可以。
-
@AndréCaceres
MAX_SIZE可以定义也可以不定义。 -
@AndréCaceres 问题不在于定义 maxSize,而在于如何将 MAX_SIZE 注入代码
标签: c++ gcc macros preprocessor compile-time-constant