You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在D语言中使用简单枚举:传递与数值获取问题

枚举传递给函数 & 获取数值的简便方法

我来帮你梳理这两个枚举的常见问题,拿几个主流语言的场景举例说明:


一、如何将枚举类型传递给函数?

1. C++场景

普通枚举(无class关键字)

普通枚举会隐式转换为整数,直接传枚举值或者对应的整数都可行,但更推荐传枚举类型本身,代码可读性更高:

enum OldColor { Red, Green, Blue };

// 函数参数直接定义为枚举类型
void printOldColor(OldColor color) {
    // 处理逻辑
}

// 调用方式
printOldColor(Red); // 直接传枚举值
printOldColor(static_cast<OldColor>(1)); // 也可以强制转换整数后传递(不推荐,可读性差)

强类型枚举(enum class)

强类型枚举不会隐式转换,必须明确传递枚举类型的实例,类型安全性更高:

enum class Color { Red, Green, Blue };

// 参数指定为强枚举类型
void printColor(Color color) {
    // 处理逻辑
}

// 调用时必须带作用域
printColor(Color::Green);

如果需要让函数同时兼容整数和枚举,可以考虑重载函数或者使用模板,但一般建议优先用强类型枚举+明确参数类型,避免隐式转换的bug。

2. Python场景

Python的枚举是Enum类的子类实例,直接传递枚举实例给函数即可,还可以加类型注解提升可读性:

from enum import Enum

class Color(Enum):
    Red = 1
    Green = 2
    Blue = 3

# 函数参数指定枚举类型
def print_color(color: Color):
    print(f"Color value: {color.value}")

# 调用方式
print_color(Color.Red)

二、简便获取枚举的数值

1. C++场景

普通枚举

直接隐式转换为整数即可:

OldColor c = Blue;
int value = c; // 得到2(默认从0开始计数)

强类型枚举

需要显式转换,有几种简便方式:

  • static_cast强制转换:最基础的方式
Color c = Color::Red;
int value = static_cast<int>(c); // 得到0
  • 封装工具函数:避免重复写static_cast
#include <type_traits>

template <typename Enum>
constexpr auto enum_to_value(Enum e) noexcept {
    return static_cast<std::underlying_type_t<Enum>>(e);
}

// 使用示例
Color c = Color::Blue;
auto val = enum_to_value(c); // 得到2
  • C++20+标准库工具:用std::to_underlying直接获取底层数值
#include <utility>

Color c = Color::Green;
auto val = std::to_underlying(c); // 得到1

2. Python场景

Python枚举自带value属性,直接获取即可:

print(Color.Green.value) # 输出2

内容的提问来源于stack exchange,提问作者NegativeBreakfast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:38:07