On Thursday, 23 January 2014 at 15:24:19 UTC, Chris wrote:
Here's what I'm trying to do.

struct Element(T) {
    T x;
    T y;

    public void setX(T value) {
      x = value;
    }
    // More fancy functions ...
}

I store Element(s) in an array and want to pass each one by reference, which does not work.


class Tree {

    Element!string[] elements;

    public ref auto createElement(string name) {
      elements ~= Element!string(name);
      return elements[$-1];
    }
}

in main:

auto tag = Element!string("first");

The elements in Tree.elements and the ones in main are not the same, instead I obtain a copy of each. How can I make them refer to the same Elements? If I have to add a .ptr property to Element, how do I do that? Is that possible at all or did I shoot myself in the foot with the template?

You can use pointer

Tree tree = new Tree();
Element!(string)* element = &tree.createElement("first");

& is to get address of returned value element.

You also can rewrite your function like this:

public Element!(string)* createElement(string name) {
        elements ~= Element!string(name);
        return &elements[$-1];
    }

to return pointer without need to get address on caller side.

Reply via email to