我正在尝试用 C++11 编写一个程序,该程序基于enums
确定主应用程序的值。我知道以下作品:
namespace space
{
enum class A { One, Two, Three };
}
space::A getSetting();
#define SETTING getSetting()
但是我也想根据第一个设置做一个条件编译来确定第二个设置,比如:
namespace space
{
enum class A { One, Two, Three };
enum class B { Red, Blue, Yellow };
enum class C { Black, White };
enum class D { Green, Orange };
}
space::A getSettingA();
space::B getSettingB();
space::C getSettingC();
space::D getSettingD();
#define SETTING_ONE getSettingA()
#if SETTING_ONE == A::One
#define SETTING_TWO getSettingB()
#elif SETTING_ONE == A::Two
#define SETTING_TWO getSettingC()
#else
#define SETTING_TWO getSettingD()
#endif
这会提供“C4067:预处理器指令后出现意外标记 - 需要换行符”的编译器警告。我做了一些研究,发现我不能::
在预处理器指令中使用范围运算符,但是有没有办法进行这种条件编译?
编辑:我基本上是在寻找一种将一个变量用于几个不同的方法enums
,比如不透明的数据类型。使用#define
是最简单的解决方案。我以相同的方式使用生成的设置,所以我不想跟踪我正在使用的特定枚举,只需要一个名称来调用任何设置。
已弃用:我已决定为我的问题找到不同的解决方案,并且不再寻求此问题的答案。