53、C++ 枚举与多重继承深入解析

C++ 枚举与多重继承深入解析

1. 枚举相关内容
1.1 枚举概述

C++ 从 C 继承了枚举(enum)的定义。早期的实现缺乏正式模型,标准委员会在确定其正式语义时,只能捕捉现有编译器的行为,后来还引入了作用域枚举器来合理定义枚举。

1.2 枚举的 I/O 支持问题

作用域和非作用域枚举的一个不足是缺乏 I/O 支持,C++ 不会为枚举隐式创建 I/O 运算符,需要开发者自行实现。非作用域枚举器可隐式提升为底层类型并作为整数打印,但如果要使用枚举器的名称,就必须自己实现 I/O 运算符。而且 C++ 没有提供反射或自省机制来发现枚举器的字面名称。

要实现能读写字符串的 I/O 运算符,需要将字符串映射到枚举值,反之亦然。由于大多数枚举类型的字面量数量有限,通常可以创建一个以名称为键、字面量为值的映射。为了将值映射到字符串,可以线性搜索所有值以找到匹配项。

以下是实现一个类似映射类型并支持反向查找的示例代码:

export module enums;
import <algorithm>;
import <initializer_list>;
import <stdexcept>;
import <string>;
import <type_traits>;
import <unordered_map>;
export template<class T>
concept is_enum = std::is_enum_v<T>;
export 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值