首页
学习
活动
专区
工具
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。

30200

Java枚举详解

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

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

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

    79950

    C++枚举类型enum与enum class

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

    4.9K41

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

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

    71380

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

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

    71320

    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,它的类型就是

    13310

    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

    29520

    Python 枚举

    枚举的定义 首先,定义枚举要导入enum模块。 枚举定义用class关键字,继承Enum类。 用于定义枚举的class和定义类的class是有区别。...每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1。 每个成员的数据类型就是它所属的枚举。...1 成员Color.red和Color.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

    60410

    你需要知道的Java枚举知识

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

    58320

    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中的枚举值在它们自己的作用域内,因此可以避免与其他类型或变量的命名冲突。

    7810

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

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

    19200

    如何使用 JPA 和 Hibernate 将 Java Enum 映射到自定义值

    如何使用 JPA 和 Hibernate 将 Java Enum 映射到自定义值 1、引言 在本文中,我们将探讨如何在使用 JPA 和 Hibernate 时,将 Java Enum 映射到自定义值。...PostStatus Enum 的自定义 statusCode,而不是典型的 Java Enum 序数或名称值。...3、如何使用 JPA 和 Hibernate 将 Java Enum 映射到自定义值 默认情况下,Hibernate 使用 EnumType 来确定是使用 Enum 名称还是序数来持久化 Enum 到底层数据库列中...JPA 提供了 AttributeConverter 抽象,帮助我们在希望控制某个基本类型如何在数据库表列中持久化时使用。...例如,如果你的应用程序之前使用的是持久化到数据库中的默认序数值,重新排序 Enum 值会破坏应用程序,除非更新 post 表中的现有 Enum 列值或使用自定义 AttributeConverter 实例

    7010

    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.9K30

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

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

    1.6K00

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

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

    52220
    领券