Month的表示:enum class与class
Representation of Month: enum class vs. class
我对c++相当陌生,目前正在通过Stroustrup的编程:原理&练习使用c++。我已经读了这本书的三分之二,但由于有一段时间没有电脑,我只是在练习中赶上了。我目前正在做第9章中的练习,其中要求读者创建一个Date类。
我的简单Date类最初包含一个枚举类Month,其中三个字母缩写表示每个月,因此我可以编写如下代码:
Month::jan
例如,比写整数1更具描述性。据我所知,这是使用枚举类的主要目的/优势。
现在我正在扩展Date类来做诸如计算给定日期的天数或给定日期的周数之类的事情,我发现自己想要替换枚举类Month,用一个类或结构来保存每个月的信息(例如名称,缩写名称,月号和月中的天数)和包含12个月的容器(vector是目前我唯一可以使用的)。这也允许我编写成员函数,从组织的角度来看,在Month类的范围内比在Date类的范围内更好。
但是,如果我改用这种表示,就会失去枚举类在代码中引用月份时提供的便利,而不得不这样写:Month.Months(1) // where Months is the Month class member vector<Month>
所以我的问题是,有没有一种方法可以让我设计我的类,让我两全其美?谢谢!
我是这样做的:
https://github.com/HowardHinnant/date/blob/master/date.h L1671-L1682
CONSTDATA
只是constexpr
的向后兼容性宏。如果链接失效:
constexpr date::month jan{1};
constexpr date::month feb{2};
constexpr date::month mar{3};
constexpr date::month apr{4};
constexpr date::month may{5};
constexpr date::month jun{6};
constexpr date::month jul{7};
constexpr date::month aug{8};
constexpr date::month sep{9};
constexpr date::month oct{10};
constexpr date::month nov{11};
constexpr date::month dec{12};
如果您的工具箱中没有constexpr
(需要c++ 11),您可以使用extern const
并将其定义放在源代码中。
相关文章:
- enum是C++中的宏变量还是整数变量
- 是否可以从int转换为enum类类型
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- 在C++中,将int值赋给enum,反之亦然
- 两个 COM 组件中 ENUM 的重复条目
- 将枚举类型保存在位字段 [dcl.enum] [class.bit] 中
- 如何 std::map<enum class, std::string>?
- "enum class"是C++中的类类型吗?
- "enum class" Visual C++ 2012 中是什么意思?
- C++:使用"enum class"的类内部的枚举
- 我可以在DLL边界使用“enum class”作为函数的参数类型吗
- Month的表示:enum class与class
- 是否可以使作用域枚举("enum class")在上下文中可转换为布尔值?
- Class-scoped enum
- 如何访问封装在类中的未命名"enum class"?