On Monday, 9 June 2025 at 07:24:41 UTC, confuzzled wrote:
Hello community,

Is it possible to accomplish the following using ref instead of pointers? If so, please share an example.

```d
// Represents our Backtester engine
struct Engine
{
// It STORES a pointer to its data source. This is its "memory".
    const(DataSource)* dataSource;

    // The run method USES the stored pointer.
    void run()
    {
        writeln("Engine running...");
        if (dataSource is null)
        {
            writeln("  Error: Data source not configured!");
            return;
        }

        // We access the data through the remembered pointer.
        foreach (i, val; dataSource.data)
        {
            writef("  Processing data point %d: %d\n", i, val);
        }
    }
}

A ref cannot be a member of a type. But ref can be returned by a function.

So what you want is a *property* function:

```d
struct Engine
{
    private const(DataSource)* _dataSourceStorage;

    this(ref const(DataSource) dataSource)
    {
        this._dataSourceStorage = &dataSource;
    }

    @property ref dataSource() => *_dataSourceStorage;

    ... // rest the same
}

...

void main()
{
    auto myData = DataSource([10, 20, 30]);
    auto myEngine = Engine(myData); // initialize via ref
    ...
}
```

-Steve

Reply via email to