首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在“enum class”类型中输出变量的名称和值?

在"enum class"类型中,要输出变量的名称和值,可以使用反射机制来实现。以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <string>
#include <typeinfo>

enum class Color {
    RED,
    GREEN,
    BLUE
};

template<typename Enumeration>
std::string enumToString(const Enumeration value)
{
    const auto valueType = static_cast<std::underlying_type_t<Enumeration>>(value);
    const auto enumType = typeid(value).name();

    std::string enumTypeName = enumType;
    if (enumTypeName.find("enum") != std::string::npos) {
        enumTypeName.erase(0, 5); // Remove "enum "
    }

    std::string enumValueName;
    switch (valueType) {
        case static_cast<std::underlying_type_t<Enumeration>>(Enumeration::RED):
            enumValueName = "RED";
            break;
        case static_cast<std::underlying_type_t<Enumeration>>(Enumeration::GREEN):
            enumValueName = "GREEN";
            break;
        case static_cast<std::underlying_type_t<Enumeration>>(Enumeration::BLUE):
            enumValueName = "BLUE";
            break;
        default:
            enumValueName = "Unknown";
            break;
    }

    return enumTypeName + "::" + enumValueName + " (" + std::to_string(valueType) + ")";
}

int main()
{
    Color color = Color::GREEN;

    std::string output = enumToString(color);
    std::cout << output << std::endl;

    return 0;
}

在上述示例中,我们定义了一个枚举类型Color,其中包含了三种颜色:红、绿、蓝。然后,我们创建了一个模板函数enumToString,接受一个枚举类型的值作为参数,并返回一个字符串,包含了变量的名称和值。

enumToString函数中,我们首先将枚举值转换为其底层类型的值,以便进行后续的比较。然后,我们使用typeid来获取枚举类型的名称,并将其存储在enumTypeName中。如果类型名称包含了"enum",则我们移除开头的"enum "部分。

接下来,我们根据枚举值的底层类型的值,通过switch语句来确定变量的名称,并将其存储在enumValueName中。

最后,我们将枚举类型的名称、变量的名称和值以字符串的形式拼接起来,并返回。

main函数中,我们创建了一个Color类型的变量color,并将其赋值为Color::GREEN。然后,我们调用enumToString函数,将color作为参数传入,并将返回的字符串输出到控制台。

这样,我们就可以在"enum class"类型中输出变量的名称和值了。请注意,这只是一个示例代码,并针对Color枚举类型进行了处理,如果有其他的枚举类型,需要根据实际情况进行相应的修改。

关于云计算、IT互联网领域的名词词汇,我可以为您提供相关解释和腾讯云产品的介绍。请告诉我您感兴趣的名词或话题,我将为您提供相应的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C 语言结构体枚举完全指南:成员访问、字符串操作、枚举基础

// 打印 printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString); return 0; } 注意:插入顺序必须与结构体声明变量类型顺序一致...C 语言中枚举 (enum) 枚举 (enum) 是一种特殊类型,用于表示一组常量(不可更改)。...在 main() 方法,指定 enum 关键字,后跟枚举名称 (Level) 枚举变量名称 (myVar): enum Level myVar; 现在您已创建了一个枚举变量 (myVar),可以为其分配一个...如果现在尝试打印 myVar,它将输出 1,表示 MEDIUM: int main() { // 创建一个枚举变量并为其分配一个 enum Level myVar = MEDIUM; /.../ 打印枚举变量 printf("%d", myVar); return 0; } 更改 您所知,枚举第一个项目的为 0。

27800

Java枚举详解

枚举在曰常生活很常见,例如一个人性别只能是“男”或者“女”,一周星期只能是 7 天一个等。类似这种当一个变量有几种固定可能取值时,就可以将它定义为枚举类型。...声明枚举 声明枚举时必须使用 enum 关键字,然后定义枚举名称、可访问性、基础类型成员等。...、private internal;enumname 表示声明枚举名称enum-base 表示基础类型enum-body 表示枚举成员,它是枚举类型命名常数。...虽然使用其他 Map( HashMap)实现也能完成枚举类型实例到映射,但是使用 EnumMap 会更加高效。...从本例可以看出,使用 EnumMap 可以很方便地为枚举类型在不同环境绑定到不同上。本例子 getURL 绑定到 URL 上,在其他代码可能又被绑定到数据库驱动上去。

79840
  • C++枚举类型enumenum class

    答:如果一个变量只有几种可能,那么就可以定义为枚举类型,比如:性别只有男女,那么就可以将性别定义为一种枚举类型,其中男女就是性别所包含变量。...所谓”枚举”是指将变量一一列举出来,变量只能在列举出来范围内。在C++,枚举类型分为不限定作用域(enum限定作用域(enum class)。   ...Girl Boy了,:  // 错误,编译器提示 Girl,Boy重定义 enum Student {     Girl,                     Boy     }; 编译错误原因在于...枚举变量只能取枚举说明结构某个标识符常量。在外部可以对枚举变量进行赋值,但需要进行类型转换。枚举常数可以隐式转换为int,但是int不可以隐式转换为枚举。...为枚举每个名称分配一个整数值,该与其在枚举顺序相对应。默认情况下,第一个分配0,下一个分配1,依次类推,但也可以显示设置枚举名称。枚举可以用来作判断比较。

    4.6K41

    (23) 枚举本质 计算机程序思维逻辑

    前面系列,我们介绍了Java中表示操作数据基本数据类型、类接口,本节探讨Java枚举类型。...Enum类有两个实例变量nameordinal,在构造方法需要传递,name(), toString(), ordinal(), compareTo(), equals()方法都是由Enum类根据其实例变量...valuesvalueOf方法是编译器给每个枚举类型自动添加,上面的枚举类型Size转换后普通类代码大概如下所示: public final class Size extends Enum<Size...典型场景 用法 以上枚举用法是最简单,实际枚举经常会有关联实例变量方法,比如说,上面的Size例子,每个枚举可能有关联缩写中文名称,可能需要静态方法根据缩写返回对应枚举,修改后Size...abbrtitle,以及对应get方法,分别表示缩写中文名称,定义了一个私有构造方法,接受缩写中文名称,每个枚举在定义时候都传递了对应,同时定义了一个静态方法fromAbbr根据缩写返回对应枚举

    79650

    深入浅出OOP(六): 理解C#Enums

    MSDN定义:枚举类型(也称为枚举)为定义一组可以赋给变量命名整数常量提供了一种有效方法。  例如,假设您必须定义一个变量,该变量表示一周一天。 该变量只能存储七个有意义。...若要定义这些,可以使用枚举类型。枚举类型是使用 enum 关键字声明。 ? 从OOP上来说,枚举角色和和class一样,它创建了一种新数据类型。...: 0 从上面的例子,我们可以看到枚举使用,如同static变量一样,可被直接使用。...下来,我们指定了Brown为9,则 其下Green为Brown + 1,为10。 这是一个有趣enum特性。 指定数据类型超过枚举定义类型,如何?...IConvertible enum,数字字符串可以互相转换 enum可被初始化为同样 enum要在初始化时候确定 enum,'value__'关键字不能使用

    71080

    java | 深入理解Java枚举类型(一)

    int枚举模式,这样定义方式并没有什么错,但它存在许多不足,如在类型安全使用方便性上并没有多少好处,如果存在定义int相同变量,混淆几率还是很大,编译器也不会提出任何警告,因此这种方式在枚举出现后并不提倡...这里主要说明一下ordinal()方法,该方法获取是枚举变量在枚举类声明顺序,下标从0开始,日期中MONDAY在第一个位置,那么MONDAYordinal就是0,如果MONDAY声明位置发生变化...,并作为数组返回,而valueOf(String name)方法与EnumvalueOf方法作用类似根据名称获取枚举变量,只不过编译器生成valueOf方法更简洁些只需传递一个参数。...Enum类型后,values()方法将会失效,也就无法一次性获取所有枚举实例变量,但是由于Class对象存在,即使不使用values()方法,还是有可能一次获取到所有枚举实例变量,在Class对象存在如下方法...抽象类而Java只支持单继承,因此枚举类是无法手动实现继承),可以把enum类当成常规类,也就是说我们可以向enum添加方法变量,甚至是mian方法,下面就来感受一把。

    70820

    Python day7 面向对象高级编程 (2)

    _birth上面的birth是可读写属性,而age就是一个只读属性,因为age可以根据birth当前时间计算出来#要特别注意:属性方法名不要和实例变量重名#错误案例class Student(object...): # 方法名称实例变量均为birth: @property def birth(self): return self.birth多重继承class Dog(Mammal...枚举成员和它们名称都存储在特殊members属性,这是一个字典;Month.members.items()会返回一个包含(成员名称, 成员)对迭代器这行代码在循环中打印每个成员名称,member.value...是自动分配给枚举成员一个唯一,默认从1开始递增输出结果为:Jan => Month.Jan , 1Feb => Month.Feb , 2Mar => Month.Mar , 3Apr => Month.Apr...Wed = 3 Thu = 4 Fri = 5 Sat = 6元类(后面再来补充)type()动态创建类type()函数可以查看一个类型变量类型,Hello是一个class,它类型就是

    12910

    27. 企业级开发基础8:面向对象扩展

    类型属性对象成员属性 在之前章节,我们就类对象已经学习过了如下内容 类型定义 类型属性定义 类型中方法定义 属性方法私有化操作 当类型在处理过程,我们知道在init()函数可以初始化类成员属性.../变量,在创建对象过程,每个对象成员属性都是互相独立且互不影响;对象A是不能直接使用对象B成员属性,而是要通过对象B调用获取对象B属性; python类型,还提供了一种方式,可以直接定义类属性...python为了处理这样问题,提供了一个特殊类属性__slots__ ,该属性是一个元组,元组定义了类可以出现所有成员属性名称 # 创建一个Person类型 class Person:...我们看到一旦出现多重继承,就会出现这样继承多个父类中出现了多个相同名称变量或者方法情况,使用这些变量方法时候一定要注意一个原则,先继承谁就使用谁变量或者方法!...from enum import Enum # Month = Enum("枚举名称", (元组枚举)) M = Enum("Month", ("JAN", "FAB", "MAR", "APR

    28920

    Python 枚举

    枚举定义 首先,定义枚举要导入enum模块。 枚举定义用class关键字,继承Enum类。 用于定义枚举class定义类class是有区别。...每一个成员都有它们各自名称,Color.red成员名称是:red,是:1。 每个成员数据类型就是它所属枚举。...1 成员Color.redColor.red_alias具有相同,那么成员Color.red_alias名称red_alias就被视作成员Color.red名称red别名。...1.3 如果枚举存在相同成员,在通过获取枚举成员时,只能获取到第一个成员 from enum import Enum class Color(Enum): red = 1 red_alias...枚举取值 2.1 通过成员名称来获取成员 Color['red'] 2.2 通过成员来获取成员 Color(2) 2.3 通过成员,来获取它名称 red_member = Color.red

    60210

    你需要知道Java枚举知识

    概述 定义 枚举(enum全称为enumeration)类型是Java 5新增类型,存放在java.lang包,允许用常量来表示特定数据片断,而且全部都以类型安全形式来表示。...枚举类型符合通用模式Class Enum>,而E表示枚举类型名称。...枚举类型每一个都将映射到protected Enum(String name, int ordinal)构造函数。在这里每个名称都被转换成一个字符串,并且序数设置表示了此设置被创建顺序。...public static final,必须要位于枚举类第一个语句 枚举类可以定义自己成员变量、成员函数带参构造方法,自定义带参构造方法时,枚举需要传参 枚举类可以存在抽象方法,但是枚举必须要实现抽象方法...EnumSet保证集合元素不重复;EnumMapkey是enum类型且不能为null,而value则可以是任意类型。EnumSetEnumMap内部以数组来实现,性能更好。

    57420

    Web前端面试敲重点知识,14个TypeScript核心基础面试题答案

    6、TypeScript 声明变量有哪些不同关键字? 7、如何书写带有类型注释函数 ? 8、如何在 TypeScript 创建对象 ? 9、如何在 TypeScript 中指定可选属性 ?...string:表示文本,例如“javascript”、“typescript”等 number:表示数值, 1、2、25、36 等 boolean:表示一个变量,它可以具有“真”或“假” image.png...有时你想将存储在变量,但事先不知道该变量类型 当你没有明确提供类型时,TypeScript假定变量是any类型,并且编译器无法从周围上下文中推断出类型 例如,该来自 API 调用或用户输入。...void 表示变量没有类型,它充当与任何相反类型,它在不返回函数特别有用 如果变量是 void 类型,则只能将 null 或 undefined 分配给该变量。...枚举允许我们创建命名常量,这是一种为数字常量值赋予更友好名称简单方法 枚举由关键字 enum 定义,后跟其名称成员。 image.png 11、什么是参数解构 ?

    11.5K10

    四、从C语言到C++(四)

    :42 return 0; } 注意 在C++,我们使用&符号来声明引用,并在函数调用传递变量名称(而不是地址)。...枚举类型 当从C语言迁移到C++并使用枚举类型时,您会发现C++枚举(特别是C++11及更高版本类型枚举,也称为enum class)提供了更多功能安全性。... Red() 是不同作用域 底层类型指定: 在 C++ ,你可以为枚举指定底层类型 int, unsigned int, char 等),以控制枚举大小表示。...迁移建议 使用enum class而不是enum:为了获得更好类型安全性可读性,建议使用enum class代替传统enum。...避免命名冲突:由于enum class枚举在它们自己作用域内,因此可以避免与其他类型变量命名冲突。

    7710

    Java 中文官方教程 2022 版(四十三)

    提供了设置获取字段、调用方法以及使用特定构造函数创建对象实例示例。 这节课介绍了两种特殊类型类:在运行时生成数组定义唯一命名对象实例enum类型。...在本教程后续部分检查枚举EnumSpy示例包含了一个可能实现。 在输出方法部分,观察到方法名称包含声明类名称。...获取字段类型 描述了如何获取字段声明类型泛型类型 检索和解析字段修饰符 展示了如何获取字段声明部分,public或transient 获取设置字段 说明了如何访问字段...获取方法类型信息 展示了如何枚举类声明方法并获取类型信息 获取方法参数名称 展示了如何检索方法或构造函数参数名称其他信息 检索和解析方法修饰符描述了如何访问和解码与方法相关修饰符其他信息...java.lang.reflect.Field类方法可以检索有关字段信息,比如它名称类型、修饰符注解。(检查类修饰符类型章节类课程描述了如何检索注解。)

    18400

    Java5 枚举(Enum)

    在Java,被enum关键字修饰类型就是枚举类型,此类继承了Enum类,形式如下: public enum ColorEnum { RED, // 代表ColoeEnum一个对象...枚举类 在某些情况下,一个类对象是有限且固定季节类,它只有春夏秋冬4个对象这种实例有限且固定类,在 Java 中被称为枚举类; 在 Java中使用enum关键字来定义枚举类,其地位与 class...、interface 相同; 枚举类是一种特殊类,它普通类一样,有自己成员变量、成员方法、构造器 (只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举时被调用)...; 一个Java源文件中最多只能有一个public类型枚举类,且该Java源文件名字也必须该枚举类类名相同,这点类是相同; 使用 enum 定义枚举类默认继承了 java.lang.Enum...,名称必须与在此类型声明枚举常量所用标识符完全匹配(不允许使用额外空白字符)。

    1.2K31

    java @interface自定义注解通过反射获取注解属性

    参考链接: Java具有自定义枚举 @interface  @interface用来声明一个注解,其中每一个方法实际上是声明了一个配置参数。 ...方法名称就是参数名称,返回类型就是参数类型  参数类型只能是基本类型Class、String、enum。  可以通过default来声明参数默认。 ...注解应用  生成文档。@param @return 等替代配置文件功能。spring2.5开始基于注解配置。作用就是减少配置。...指明该类型注解可以注解元素范围,主要包括以下几种参数类型:  ElementType.TYPE 用于类,接口,枚举,但不能是注解 ElementType.FIELD 作用于字段,包含枚举 ElementType.METHOD...JVM会读取注解,同时会保存到class文件 通过反射获取注解属性  注解解析依赖于反射。

    3.8K30

    夯实Java基础系列12:深入理解Java反射机制

    因此,枚举类型是某类数据可能取值集合,如一周内星期可能取值集合为:   { Sun,Mon,Tue,Wed,Thu,Fri,Sat}   该集合可定义为描述星期枚举类型,该枚举类型共有七个元素,因而用枚举类型定义枚举变量只能取集合某一元素...枚举类型定义只是定义了一个新数据类型,只有用枚举类型定义枚举变量才能使用这种数据类型。...EnumSet保证集合元素不重复;EnumMap key是enum类型,而value则可以是任意类型。...那么像枚举也是在JDK1.5才引入,又是怎么实现呢? Java在1.5添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性基础方法。...从Enum我们可以看到,为每个枚举都定义了两个属性,nameordinal,name表示我们定义枚举常量名称FRIDAY、TUESDAY,而ordinal是一个顺序号,根据定义顺序分别赋予一个整形

    1.6K00

    C#学习笔记(3)——枚举

    GetName方法根据指定(作为第二个参数传入)返回枚举相应字符串。...关于EnumtoString方法       这里有一个我在CSDN上看到程序,读懂这个程序,不仅可以很好理解关于EnumtoString方法,而且可以很好理解符号之间关系。  ...也就是说,如果未将   FlagsAttribute   应用到此枚举类型,且存在与此实例相等已命名常数,则返回为包含该常数名称字符串。...如果应用了   FlagsAttribute,且存在与此实例相等一个或多个已命名常数组合,则返回是一个字符串,该字符串包含用分隔符分隔常数名称列表。...The   value   of   this   instance   is   'Red'.     */          枚举位标志        我们经常会把枚举类型设置为2

    51520

    枚举类

    当需要定义常量时,一个办法是用大写变量通过整数来定义 好处是简单,缺点是类型是int,并且仍然是变量 Enum可以把一组相关常量定义在一个class,且class不可变,而且成员可以直接比较,这样这些相关常量就不会变化了...10 #输出:Nov => Month.Nov , 11 #输出:Dec => Month.Dec , 12 自定义枚举类   如果需要更精确地控制枚举类型,可以从Enum派生出自定义类...from enum import Enum, unique @unique #@unique装饰器可以帮助我们检查保证没有重复 class Weekday(Enum...:Weekday.Mon print(day1.value) #输出:01,value属性是枚举常量 print(Weekday.Tue) #输出:Weekday.Tue...print(Weekday['Tue']) #输出:Weekday.Tue,可用成员名称引用枚举常量 print(Weekday['Tue'].value) #输出:02

    41310
    领券