@@ -61,19 +61,19 @@ int main() {
6161### 代码分析
6262
63631 . ** ` std::variant<int, float, std::string> ` **
64- - 这是一个类型安全的联合体,可以存储 ` int ` 、` float ` 或 ` std::string ` 中的任意一种类型。
65- - 将多个 ` std::variant ` 存储在 ` std::vector ` 中,形成一个统一的容器。
64+ - 这是一个类型安全的联合体,可以存储 ` int ` 、` float ` 或 ` std::string ` 中的任意一种类型。
65+ - 将多个 ` std::variant ` 存储在 ` std::vector ` 中,形成一个统一的容器。
6666
67672 . ** ` std::visit ` **
68- - 使用 ` std::visit ` 访问每个 ` std::variant ` 元素。
69- - 传入一个** 泛型 Lambda 表达式** ,通过 ` if constexpr ` 在编译时分发到不同的分支,处理不同类型的值。
68+ - 使用 ` std::visit ` 访问每个 ` std::variant ` 元素。
69+ - 传入一个** 泛型 Lambda 表达式** ,通过 ` if constexpr ` 在编译时分发到不同的分支,处理不同类型的值。
7070
71713 . ** ` if constexpr ` 与 ` std::is_same_v ` **
72- - 使用 ` std::is_same_v ` 判断存储的实际类型。
73- - 根据类型进行不同的输出操作。
72+ - 使用 ` std::is_same_v ` 判断存储的实际类型。
73+ - 根据类型进行不同的输出操作。
7474
75754 . ** 类型安全**
76- - 如果添加一个未处理的类型,编译器会在 ` static_assert ` 中报错,提醒开发者补充处理逻辑。
76+ - 如果添加一个未处理的类型,编译器会在 ` static_assert ` 中报错,提醒开发者补充处理逻辑。
7777
7878## 使用传统C++实现std::visit
7979
@@ -143,13 +143,13 @@ int main() {
143143实现 `std::visit` 的关键在于以下几个方面:
144144
145145* **类型索引 (`index()`)**
146- 根据传入的 `std::variant` 参数类型,确定其在类型集合中的索引。
146+ 根据传入的 `std::variant` 参数类型,确定其在类型集合中的索引。
147147
148148* **类型访问 (`std::get<T>`)**
149- 根据传入的模板类型 `T`,获取存储的值。如果类型不匹配,抛出异常,确保类型安全。
149+ 根据传入的模板类型 `T`,获取存储的值。如果类型不匹配,抛出异常,确保类型安全。
150150
151151* **类型分派 (`std::visit`)**
152- 根据当前存储的类型,调用 `Visitor` 中对应的 `operator()` 方法。可以通过 `switch-case` 或模板匹配来实现类型分发。
152+ 根据当前存储的类型,调用 `Visitor` 中对应的 `operator()` 方法。可以通过 `switch-case` 或模板匹配来实现类型分发。
153153
154154### 代码实现0 - 基本框架
155155
0 commit comments