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
超级会员免费看
订阅专栏 解锁全文
33

被折叠的 条评论
为什么被折叠?



