C++ 相同的枚举类,但不同的定义取决于条件
嗨,我正试图让枚举在类之外,但在名称空间内,并让它们根据某些条件有不同的定义。我怎样才能做到这一点?C++ 举个例子C++ 相同的枚举类,但不同的定义取决于条件,c++,enums,C++,Enums,嗨,我正试图让枚举在类之外,但在名称空间内,并让它们根据某些条件有不同的定义。我怎样才能做到这一点?C++ 举个例子 namespace fruit { if (season) { enum eAvailfruit { apple, banana, cNumFruit }; } else { enum eAvailfruit { watermelon,
namespace fruit {
if (season) {
enum eAvailfruit
{
apple,
banana,
cNumFruit
};
} else {
enum eAvailfruit
{
watermelon,
grape,
peach,
cNumFruit
};
}
}
有办法吗 一种方法是使用预处理器:
#ifdef SUMMER
enum Fruit {
// ....
};
#else
enum Fruit {
// ...
};
#endif
然后以编译器通常喜欢的方式传递编译时常量,例如gcc中的-D标志
或者,另一方面,不要这样做,因为这是一个糟糕的想法。一个稍微好一点的解决方案可能是:
enum Season {
Spring,
Summer,
Autumn,
Winter
};
template <Season S>
struct fruit; // undefined
template <>
struct fruit<Spring>
{
enum AvailableFruit {
Banana,
// etc
};
};
template <>
struct fruit<Summer>
{
enum AvailableFruit {
// etc
};
};
// etc, specialisations for Autumn and Winter
这些结构相当类似于C++11作用域枚举,因为您可以引用例如fruit::Banana,但它们是类型安全的,因为仅引用纯香蕉,甚至仅引用纯可用柚子都是非法的。一种方法是使用预处理器:
#ifdef SUMMER
enum Fruit {
// ....
};
#else
enum Fruit {
// ...
};
#endif
然后以编译器通常喜欢的方式传递编译时常量,例如gcc中的-D标志
或者,另一方面,不要这样做,因为这是一个糟糕的想法。一个稍微好一点的解决方案可能是:
enum Season {
Spring,
Summer,
Autumn,
Winter
};
template <Season S>
struct fruit; // undefined
template <>
struct fruit<Spring>
{
enum AvailableFruit {
Banana,
// etc
};
};
template <>
struct fruit<Summer>
{
enum AvailableFruit {
// etc
};
};
// etc, specialisations for Autumn and Winter
这些结构相当类似于C++11作用域枚举,因为您可以引用例如fruit::Banana,但它们是类型安全的,因为仅引用纯香蕉,甚至仅引用纯可用柚子都是非法的。我想如果season是编译时常量,而不是其他。条件的作用域是什么,季节?但您将如何处理使用枚举的代码?例如,如果你有提到香蕉的代码,那么当季节为假时会发生什么呢?这听起来像是一个BAAAD设计理念。可能是XY问题,您实际上要解决什么问题?@user2134081引用香蕉的所有代码在整个代码中都将处于if-seasure状态,听起来您将有很多重复代码。如果seasure是编译时常量,我想是这样,但不是其他情况。条件的范围是什么,季节?但您将如何处理使用枚举的代码?例如,如果你有提到香蕉的代码,那么当季节为假时会发生什么呢?这听起来像是一个BAAAD设计理念。可能是XY问题,您实际上要解决什么?@user2134081引用香蕉的所有代码在整个代码中都将处于if季节,听起来您将有大量重复代码。