Re: opIndex for type list

2020-08-24 Thread James Lu via Digitalmars-d-learn

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.


Re: opIndex for type list

2020-08-24 Thread data pulverizer via Digitalmars-d-learn

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.


Re: opIndex for type list

2020-08-24 Thread Adam D. Ruppe via Digitalmars-d-learn

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.


Re: opIndex for type list

2020-08-24 Thread data pulverizer via Digitalmars-d-learn

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.




opIndex for type list

2020-08-24 Thread data pulverizer via Digitalmars-d-learn

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)

```