创建一个结构体作为枚举类成员

杰迪普·谢卡尔

我正在为图书馆创建一个多级枚举。

  • 我想要这样的东西(不一定完全一样)
Book::Category::PROGRAMMING::C_PLUS_PLUS

其中Book是 astruct并且Category是(当前) an enum class
基本上,我想嵌套 enums

我知道我可以这样做:

Book::Category::PROGRAMMING_C_PLUS_PLUS

但这不仅会在 中创建一长串Category,而且会使维护它成为一场噩梦(我试图用 30 来做到这一点,这已经很头疼了)。

我想分而治之。

编辑 1:我不希望它成为 a 的原因std::string是它的价值可以是任何东西我想限制Category.

不,PROGRAMMING它不是我图书馆的主要部分。让我尝试使用类和继承。

基本上,我想要enums的原因是有一组固定的有效常量。


参考:

改变实例

你可以这样做,但这将是一个糟糕的设计

一种常见的代码味道是使用enumfor what 显然应该是一个类——这里的情况是你希望一个C_PLUS_PLUS流派是该PROGRAMMING类别的派生

但是,enums 最好用于描述可能的状态,并且不能按设计继承,正如您在其中一篇参考文献中所指出的。在我看来,最好的行动方针是使在两个独立的成员变量Category可以保存的值,如PROGRAMMINGC_PLUS_PLUS,并废除其作为状态enum秒。

想一想:什么最能封装一个开放式领域,例如书籍类型/子类型?你打算编写的每一个可能enum或者只使用两个strings,(例如genresubgenre)更适合这样的开放式领域?

或者,也许,如果你是专门工作与PROGRAMMING书为主要部分的设计,转PROGRAMMING成类,使C_PLUS_PLUS的部分enum一流的。但是不要同时拥有它们enums- 这只是在提出问题,并不能解决您已经描述的维护问题。

编辑:从我发表的评论中添加 -

通过强迫它们固定不变,无论如何你都会强迫自己陷入“头痛”的境地。您正在强迫自己维护一个可能在某些时候发生变化的有效枚举的常量列表,此时您将不得不更新您的枚举列表并重新编译您的代码。这里的一个可延展的解决方案是允许它们是字符串,并在启动时读取 .txt 文件或其他内容,并将其作为可接受值的列表,如果您需要验证,您可以检查这些值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个类实例作为另一个类的成员

您是否可以创建一个没有Object作为其基类的类结构

在PowerShell中将对象作为类成员创建一个数组

创建一个组件作为对象实例中的成员

是否可以创建一个只能作为另一个类的成员实例但仍可以通过VB.NET公开访问的类?

为 UIViewController 类创建一个成员

作为另一个结构成员的结构如何在逻辑上工作?

如何在枚举变体上创建一个包含枚举泛型的结构?

我可以创建一个包含500个以上成员的枚举吗?

特定基类的抽象类的C ++ Vector,作为另一个类成员

释放使用malloc创建的结构,该成员的成员也有一个malloc

两个类将另一个类的成员函数作为朋友

返回一个结构的类函数,该结构是该类的私有成员

创建层次结构每一个类的对象实例

创建一个返回空结构实现的工厂类

一个类是否可以包含一个后来专门用于派生类的基类作为成员?

memset 一个结构体,它有另一个带有智能指针成员的结构体可以吗?

将每个枚举成员关联到一个类并从该类中获取通用信息

创建一个以classname作为模板参数的类

构建一个内部有结构体的结构体

C++ 模板类的实例作为另一个模板类的成员

如何初始化作为另一个类的成员变量的基类对象?

一个类可以有将当前类作为参数的成员吗

互斥体作为类的成员

为什么使用SomeType [1]代替SomeType *作为结构中的最后一个成员

初始化一个具有另一个类对象作为成员变量的类

一个类,其指针指向另一个类作为成员变量并将其推入向量

是否可以创建一个基于 Unreal 中的枚举输入返回不同结构的函数?

如何使枚举指向一个类