Help needed to learn templates
Vinod K Chandran
kcvinu82 at gmail.com
Sun Mar 20 08:27:44 UTC 2022
On Saturday, 19 March 2022 at 22:31:19 UTC, Stanislav Blinov
wrote:
>
> It is appearing not in the `static if`, but in the `is`
> expression, which I described further in the rest of my first
> reply. Sorry if that wasn't clear.
>
No, it was my mistake, I missed it.
> The other template syntax - `template foo(alias T)` can take as
> `T` any symbol, not just a type.
>
I understand this.
> It comes from you, the programmer. Like I said before, `is(T ==
> U[], U)` means "is T an array of some type, the type which I
> (the programmer) would like to refer to as U?". That's all
> there is to it (well, not quite, but it should suffice for
> starters). You're simply introducing an identifier. So, when
> `T` is an `int[][][]`, naturally, `U` becomes an alias to
> `int[][]` (look at the converse - when `U` is `int[][]`, `U[]`
> is naturally an `int[][][]`).
>
Okay, got it.
> You can think of that test as this:
>
> ```d
> import std.traits : isDynamicArray;
>
> // ...
>
> static if (isDynamicArray!T)
> {
> alias U = typeof(T.init[0]);
> // ...
> }
> ```
>
Yes, in this case everything is simple and clear.
> ...which would roughly be the same thing - you test if `T` is a
> dynamic array of some type, and then make an alias for that
> array's element type. It's just that the `is` expression allows
> you to create such alias in situ.
>
Okay. Got the point. Thanks. Now, I understand that why Ali
suggest me to learn **`is()`** expression.
More information about the Digitalmars-d-learn
mailing list