【发布时间】:2019-12-18 15:01:52
【问题描述】:
我正在为图书馆创建一个多级枚举。
- 我想要这样的东西(不一定完全一样):
Book::Category::PROGRAMMING::C_PLUS_PLUS
其中Book 是struct,Category 是(当前)enum class。
基本上,我想嵌套枚举。
我知道我能做到:
Book::Category::PROGRAMMING_C_PLUS_PLUS
但这不仅会在Category 中创建一个长 值列表,而且会使维护它成为一场噩梦(我试图用 30 来做这件事,但已经很头疼了)。
我想分而治之。
编辑 1:我不希望它成为 std::string 的原因是它的值可以是任何东西。我想限制Category 的域。
不,PROGRAMMING 不是我图书馆的主要部分。让我尝试使用类和继承。
基本上,我想要enums 的原因是拥有一组固定的有效常量。
参考资料:
-
Can enum class be nested?
-> 我需要创建
Book的对象,因此它不能是命名空间。我无法理解使用模板的答案。 - Why is enum class preferred over plain enum? -> 没有回答我的问题。
【问题讨论】:
-
强迫它们固定不变,无论如何你都在强迫自己陷入“头痛”的境地。您强迫自己维护一个有效枚举的恒定列表,这些枚举在某些时候可能会更改,此时您将不得不更新您的枚举列表并重新编译您的代码.一个可延展的解决方案是允许它们成为字符串,并在启动时读取 .txt 文件或其他内容,并将其作为可接受值的列表,如果需要验证,可以检查这些值。
-
@alteredinstance 另一个非常有效的观点!我认为这应该有效。程序应该有代码,而不是数据库。这属于一个单独的专用文件。请添加到答案中! +1
-
很高兴我能提供帮助!让我知道这对您是如何工作的,希望实施起来不会走太多弯路。我认为“程序应该有代码,而不是数据库”是理解解决方案的好方法。