Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
August 24, 2020 opIndex for type list | ||||
---|---|---|---|---|
| ||||
Hi all, I am trying to implement `opIndex` (e.g. T[i]) for types in a struct. So for I have `length`: ```d struct TList(T...) { enum long length = T.length; } ``` and have tried including ```d alias opIndex(long i) = T[i]; ``` or ```d alias opIndex(alias i) = T[i]; ``` called with ```d alias tList = AliasSeq!(bool, string, ubyte, short, ushort); TList!(tList)[0]; ``` but that doesn't work and I get the error: ```d opIndex cannot deduce function from argument types !()(int), candidates are: opIndex(long i) ``` |
August 24, 2020 Re: opIndex for type list | ||||
---|---|---|---|---|
| ||||
Posted in reply to data pulverizer | On Monday, 24 August 2020 at 14:19:14 UTC, data pulverizer wrote:
> I am trying to implement `opIndex` (e.g. T[i]) for types in a struct.
p.s. I know I could just write a separate `get` template, but `AliasSeq` has opIndex and opSlice operators, so I wonder whether it is possible to get those in this case.
|
August 24, 2020 Re: opIndex for type list | ||||
---|---|---|---|---|
| ||||
Posted in reply to data pulverizer | On Monday, 24 August 2020 at 14:19:14 UTC, data pulverizer wrote:
> I am trying to implement `opIndex` (e.g. T[i]) for types in a struct. So for I have `length`:
Can't really do that, the operator overloads work on instances instead of static types.
AliasSeq is magical because it just gives a name to something built-into the compiler.
|
August 24, 2020 Re: opIndex for type list | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Monday, 24 August 2020 at 14:36:22 UTC, Adam D. Ruppe wrote:
> On Monday, 24 August 2020 at 14:19:14 UTC, data pulverizer wrote:
>> I am trying to implement `opIndex` (e.g. T[i]) for types in a struct. So for I have `length`:
>
> Can't really do that, the operator overloads work on instances instead of static types.
>
> AliasSeq is magical because it just gives a name to something built-into the compiler.
Fair enough, it's not a show stopper.
|
August 24, 2020 Re: opIndex for type list | ||||
---|---|---|---|---|
| ||||
Posted in reply to data pulverizer | On Monday, 24 August 2020 at 14:19:14 UTC, data pulverizer wrote:
> Hi all,
>
> I am trying to implement `opIndex` (e.g. T[i]) for types in a struct. So for I have `length`:
>
> ```d
> struct TList(T...)
> {
> enum long length = T.length;
> }
> ```
>
> and have tried including
>
> ```d
> alias opIndex(long i) = T[i];
> ```
>
> or
>
> ```d
> alias opIndex(alias i) = T[i];
> ```
>
> called with
>
> ```d
> alias tList = AliasSeq!(bool, string, ubyte, short, ushort);
> TList!(tList)[0];
> ```
>
> but that doesn't work and I get the error:
>
> ```d
> opIndex cannot deduce function from argument types !()(int), candidates are:
> opIndex(long i)
>
> ```
This is an interesting syntax, and it reminds me of Python's generic syntax. Will be interested to see how you use type opIndex.
|
Copyright © 1999-2021 by the D Language Foundation