有没有办法用C+;中的新状态更新枚举变量+;? 我想知道是否有一种方法来更新C++中的枚举变量,动态地赋予程序新的状态。例如,我为一周中的几天创建一个void enum变量,然后,我想让用户输入更新enum变量的天数
例如,我为一周中的几天创建一个void enum变量,然后,我想让用户输入更新enum变量的天数 <>不,这不是eNUMS在C++中的工作方式。它们只是一组固定的数值表示值,在编译时完全定义了这些值 枚举值:有没有办法用C+;中的新状态更新枚举变量+;? 我想知道是否有一种方法来更新C++中的枚举变量,动态地赋予程序新的状态。例如,我为一周中的几天创建一个void enum变量,然后,我想让用户输入更新enum变量的天数,c++,types,enums,set,C++,Types,Enums,Set,例如,我为一周中的几天创建一个void enum变量,然后,我想让用户输入更新enum变量的天数 不,这不是eNUMS在C++中的工作方式。它们只是一组固定的数值表示值,在编译时完全定义了这些值 枚举值: 必须在编译时完全定义(所有) 无法在运行时使用新引入的值进行扩展 没有作为人类可读文本的标准表示 您需要的是用户输入(假设字符串数据)和预定义枚举值之间的映射,例如 enum class Weekday { Monday, Tuesday, Wednesday, Thursday, Fri
- 必须在编译时完全定义(所有)
- 无法在运行时使用新引入的值进行扩展
- 没有作为人类可读文本的标准表示
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.")
}
然后,您可以在例程中使用这些函数,这些例程需要用户界面在工作日输入
注:
- 有更复杂的方法来定义上述函数(例如,对于管理
值的简单类,有铸态运算符定义;对于工作日
,有面向流的重载),但归根结底,这就是上面提到的方法std::ostream::operator()
- 如果要对其进行配置,用户希望为特定工作日输入的内容(例如,
的工作日::星期二
1),则必须将枚举封装到一个类中,该类提供为每个“povjaj”
值设置工作日
值,并将这些值保存在额外的变量中std::string
1) 不幸的是,现在仍然没有合适的klingon到Unicode的映射。不,必须在编译时定义枚举。枚举的要点是要有一个独特的类型,其中包含可以在源代码中使用的不同值的标识符。因此,考虑在运行时(当用户可以输入东西时)向枚举添加新的标识符(比如说
teday
)是没有意义的,因为代码已经编译好了(您不能在其中使用teday
,因为它在枚举定义中不存在)。扩展枚举是一个概念,它总是从良好的意图开始,然后为以后必须处理它的任何人制造混乱。我觉得很幽默,甚至python也忽略了扩展枚举。所以,不要这样做。想一想你想解决的问题。我认为这是一个XY问题,如果讨论的话,可能会有一个干净更好的解决方案。