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);
}
```
  • Returning a refe... Chris Katko via Digitalmars-d-learn
    • Re: Returni... IchorDev via Digitalmars-d-learn
    • Re: Returni... Paul Backus via Digitalmars-d-learn
    • Re: Returni... Jacob Shtokolov via Digitalmars-d-learn
      • Re: Ret... kdevel via Digitalmars-d-learn
        • Re:... Bastiaan Veelo via Digitalmars-d-learn
          • ... kdevel via Digitalmars-d-learn
            • ... Dennis via Digitalmars-d-learn
              • ... kdevel via Digitalmars-d-learn
                • ... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
                • ... kdevel via Digitalmars-d-learn
                • ... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
                • ... kdevel via Digitalmars-d-learn

Reply via email to