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