gpt4 book ai didi

c++ - 如何限制一个类/结构,使其只能存在某些预定义的对象?

转载 作者:太空狗 更新时间:2023-10-29 20:07:01 26 4
gpt4 key购买 nike

假设您的程序需要跟踪一年中的月份。每个月都有一个名称和以天为单位的长度。显然,这是您要在编译时定义的信息,并且您要限制您的程序,以便在运行时不能定义其他月份信息。当然,您希望无需复杂的方法调用即可方便地访问月份数据。此信息的典型用例大致如下:

Month m = GetRandomMonth();
if ( m == FEBRUARY )
CreateAppointment(2011, m, 28);

// Iterating over all months would be optional, but a nice bonus
for (/* each month m*/)
cout << "Month " << m.name << " has " << m.num_days << " days." << endl;

而不应飞行的东西包括:

Month m = Month("Jabruapril", 42);  // should give compiler error

Month m = MonthService().getInstance().getMonthByName("February"); // screw this

(我故意使代码尽可能模糊,以表示我不限于任何特定的实现方法。)

解决这个问题最优雅的方法是什么?我正在添加我自己的答案以供公众审查,但欢迎使用其他解决方案。

最佳答案

怎么样:

class Month
{
public:
static const Month JANUARY;
static const Month FEBRUARY;
...

private:
Month(const std::string &name, int days) : name(name), days(days) {}

const std::string name;
const int days;
};

const Month Month::JANUARY = Month("January", 31);
const Month Month::FEBRUARY = Month("February", 28);
...

关于c++ - 如何限制一个类/结构,使其只能存在某些预定义的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5050261/

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