有没有一种方法可以用C ++中的新状态更新枚举变量?

时间:2020-11-08 18:37:34

标签: c++ types enums set

我想知道是否有一种方法可以更新C ++中的枚举变量,从而为程序动态提供新状态。例如,我为一周中的几天创建一个空的枚举变量,然后,我想让用户输入要更新枚举变量的天。

1 个答案:

答案 0 :(得分:0)

例如,我为一周中的几天创建一个空的枚举变量,然后,我想让用户输入要更新枚举变量的天。

不,这不是C ++中枚举的工作方式。它们只是一组固定的数字表示值,而该值是在编译时完全定义的。

枚举值:

  • 必须在编译时完全定义(全部定义)
  • 在运行时无法使用新引入的值进行扩展
  • 没有标准格式的可读文本

您需要的是用户输入(假设为字符串数据)和预定义的枚举值(例如,像

enum class Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };

std::string Weekday2String(Weekday wd) {
    switch(wd) {
         case Weekday::Monday: return "Mon";
         case Weekday::Tuesday: return "Tue";
         case Weekday::Wednesday: return "Wed";
         case Weekday::Thursday: return "Thu";
         case Weekday::Friday: return "Fri";
         case Weekday::Saturday: return "Sat";
         case Weekday::Sunday: return "Sun";
    }
    throw std::exception("Unexpected enum value.")
}

Weekday string2Weekday(const std::string& input) {
    if(input == "Mon") { return Weekday::Monday; }
    if(input == "Tue") { return Weekday::Tuesday; }
    if(input == "Wed") { return Weekday::Wednesday; }
    if(input == "Thu") { return Weekday::Thursday; }
    if(input == "Fri") { return Weekday::Friday; }
    if(input == "Sat") { return Weekday::Saturday; }
    if(input == "Sun") { return Weekday::Sunday; }
    throw std::exception("Invalid weekday string.")
}

您可以在例程中使用这些功能,而这需要从用户界面输入工作日。


注意:

  • 有更复杂的方法来定义上述功能(例如,作为管理Weekday值的简单类的强制转换运算符定义,或std::ostream::operator<<()std::istream::operator>>()的面向流的重载),但最终归结为以上内容。
  • 如果要配置它,用户想要在特定工作日输入什么内容(例如"povjaj"的{​​s {1}} 1 ),则必须封装枚举到一个类中,该类提供为每个Weekday::Tuesday值设置std::string值,并将其保留在额外的变量中。

1) 不幸的是,如今仍然没有适当的klingon到Unicode映射。