On Thursday, 13 April 2023 at 07:05:10 UTC, Chris Katko wrote:
Right now, I'm using pointers which resolves to:
```D
// float* opIndex(string key){...} using pointer
(*s["tacos"])++; // works with pointer, but is strange looking
s["tacos"]++; // preferred syntax or something similar
```
You can use a wrapper struct with `alias this` to make the
pointer a little nicer to use:
```d
struct Ref(T)
{
T* ptr;
ref inout(T) deref() inout { return *ptr; }
alias deref this;
}
Ref!T byRef(T)(ref T obj)
{
return Ref!T(&obj);
}
struct stats
{
float[string] data;
Ref!float opIndex(string key)
{
return data.require(key, 0).byRef;
}
}
void main()
{
stats foo;
auto x = foo["tacos"];
x++;
assert(foo["tacos"] == 1);
}
```