我对C ++很陌生,目前正在通过Stroustrup的编程:原则&练习使用C ++。我读了大约2/3的书,但由于暂时无法访问PC,我只是陷入了练习。我目前正在进行第9章中的练习,其中要求读者创建Date类。
我的简单Date类最初包含一个枚举类Month,其中三个字母缩写代表每个月,因此代码我可以编写如下内容:
Month::jan
例如,比写整数1更具描述性。据我所知,这是使用枚举类的主要目的/优势。
现在,我正在扩展Date类来执行诸如计算给定日期的天数或给定日期的周数之类的事情,我发现自己想要替换枚举class Month,包含每月保存信息的类或结构(例如名称,缩写名称,月份编号和月份中的天数)和容器(矢量实际上是我在这一点上唯一适合使用的容器)包含12个月。这也允许我编写成员函数,从组织的角度来看,这些函数在Month类的范围内比Date类更好。
但是,如果我更改为此表示形式,则会在代码中引用月份时失去枚举类提供的便利,而是必须编写如下内容:
Month.Months(1) // where Months is the Month class member vector<Month>
所以我的问题是,有没有一种方法可以设计我的课程,让我两全其美?谢谢!
答案 0 :(得分:0)
Fwiw,我就是这样做的:
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
并将定义放在源代码中。