gpt4 book ai didi

c++ - 相同的枚举类,但根据条件定义不同

转载 作者:行者123 更新时间:2023-11-30 01:54:27 24 4
gpt4 key购买 nike

您好,我正在尝试在类之外但在 namespace 内使用枚举,并让它们根据某些条件具有不同的定义。我怎样才能做到这一点? (C++)

例如像这样的东西

namespace fruit  {
if (season) {
enum eAvailfruit
{
apple,
banana,
cNumFruit
};
} else {
enum eAvailfruit
{
watermelon,
grape,
peach,
cNumFruit
};
}
}

有办法吗??

最佳答案

一种方法是使用预处理器:

#ifdef SUMMER
enum Fruit {
// ....
};
#else
enum Fruit {
// ...
};
#endif

然后以编译器通常喜欢的任何方式传递编译时常量,例如 -D gcc 中的标志。

或者,另一方面,不要这样做,因为这是一个糟糕的主意。一个稍微更好的解决方案可能如下:

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<Spring>::Banana , 但它们是类型安全的,因为仅引用普通的 Banana 是非法的,甚至只是普通的 AvailableFruit .

关于c++ - 相同的枚举类,但根据条件定义不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com