C++; 如何在命名空间中使用全局标记

How*_*May 0 c++ macros enums namespaces

我正在扩展一个定义全局TRUE和FALSE标记的现有组件.我的扩展是在新命名空间'new_namespace'中定义一个枚举'new_enum',其值为TRUE和FALSE.由于命名空间冲突,编译器无法编译它.

#define FALSE (0)
#define TRUE (1)

namespace new_namespace {
  class new_class {
  public :
  enum new_enum {
    TRUE = (0),
    FALSE = (1)
  };
  };
}
Run Code Online (Sandbox Code Playgroud)

我希望这会得到支持......我错过了什么.

最好的祝福

Som*_*ude 8

宏由预处理器处理,(正如其名称所示)在编译器正确之前运行.它的作用是宏体中的文本替换宏"调用".那么enum在预处理器步骤之后你看起来像什么,以及实际编译器看到的是:

enum new_enum {
    (1) = (0),
    (0) = (1)
};
Run Code Online (Sandbox Code Playgroud)

这不是合法的C++,也不是编译器抱怨的原因.