【问题标题】:How to check if enum value exists with C++ preprocessor如何使用 C++ 预处理器检查枚举值是否存在
【发布时间】:2022-10-21 20:57:57
【问题描述】:

我有以下问题

让我们假设有一个库有两个版本

版本 1 已经声明了这样的枚举

enum colors {
RED,
GREEN,
BLUE
}

版本 2 看起来像这样

enum colors {
RED,
GREEN,
BLUE,
TURQUOISE
}

我想做的是使用预处理器执行编译时检查,以确定我可以使用哪个枚举值,这看起来像这样

#include <colors_library.h>

int main()
{

#if TURQUOISE

some_function(TURQUOISE);

#else

some_function(BLUE);

#endif
}

但到目前为止,我没有成功使它与 #if 和 #ifdef 指令一起使用

【问题讨论】:

  • 您要求预处理器检查它不知道的信息。即使在以后的翻译步骤中也不确定是否有办法。
  • 不幸的是,C++ 不能以这种方式工作。预处理过程发生在以任何方式解释 C++ 代码之前。该文件可以包含所有哈利波特小说的组合内容,而不是 C++ 代码,预处理器不会在意。

标签: c++ enums c-preprocessor preprocessor


【解决方案1】:

预处理器无法识别枚举及其值。您将不得不定义一些宏。例如:

版本 1:

#define COLORS_TURQUOISE 0

版本 2:

#define COLORS_TURQUOISE 1

那么在你的代码中的其他地方,你可以检查:

#if COLORS_TURQUOISE == 1
   // has turquoise
#else
   // does not have turquoise
#endif

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2021-05-12
    • 2013-03-12
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多