Skip to content

Commit

Permalink
polish
Browse files Browse the repository at this point in the history
  • Loading branch information
jiacai2050 committed Apr 8, 2024
1 parent 9e070d1 commit a371b34
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions content/post/2024-04-06-zig-cpp.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,9 @@ struct Fn<false, A, B> {
Fn<sizeof(A) > sizeof(B), A, B>::OutputType
```

这就是比较类型的大小,如果 A 大,OutputType 就是 A,如果 B 大,OutputType 就是 B。这种类型生成的方式对于开发者来说完全是黑盒的,需要依赖编译器的特殊支持,有种声明式语言的特点,即:结果导向,不关心具体实现逻辑
这段代码表面上看是声明了一个类型 OutputType,而这个类型的生成依赖于一些条件。而这些条件就是模板元编程,用来从 A 和 B 中选择类型大小更大的类型,如果想要表达更复杂的逻辑,则需要掌握更多模板的奇技淫巧

如果用 Zig 来做,则完全是命令式的,即关心实现过程,通过一系列基本步骤来达到目的。上面这个例子用 Zig 来实现的话,逻辑如下
如果用 Zig 来做,则要简单的多

```Zig
fn Fn(comptime A:type, comptime B: type) type {
Expand All @@ -102,7 +102,7 @@ fn Fn(comptime A:type, comptime B: type) type {

我们再来看递归的列子。比如有一个类型的 list,我们需要返回其中第 N 个 type。同样,由于在 C++中,类型不是一等成员,因此我们不可能有一个`vector<type>`的东东。那怎么办呢?方法就是直接把`type list`放在模板的参数列表里:`typename ...T`

于是,我们写出“函数原型”
于是,我们写出“函数原型”

```C++
template <int Index, typename ...T>
Expand Down

0 comments on commit a371b34

Please sign in to comment.