On Thursday, 7 March 2024 at 22:18:40 UTC, Richard (Rikki) Andrew Cattermole wrote:
There are two ways to do this.

1. Use templates. https://tour.dlang.org/tour/en/basics/templates 2. Use a factory function. https://tour.dlang.org/tour/en/basics/delegates

```d
class Map(ATile : Tile) {
        ATile[] tiles;
}
```

Thank you. Is this first example you gave the template? Is the syntax `(ATile : Tile)` saying that ATile must be a derived class of Tile? If this isn't worse in any way than your second example, then I don't know why I wouldn't choose this one.

I suppose that if I do this, then the derived class `Mission` would be declared like `class Mission : Map(GridTile)`, right?

When I tried adding that parameter to the Map class, on attempting to build it it complained that references to Map in other classes were incomplete, as they didn't include a parameter. I suppose I must make my other classes templates too.

Something strange that I just realized is that (without doing any of the changes you suggested to me), I have a reference to a Map object as one of the class variables in Unit, yet it has allowed me to place a Mission object in it's place. It no longer allows me if I change it to a pointer. Why is it sometimes possible to put a derived class in a place meant for the class it inherits from?


  • Can a D library ... Liam McGillivray via Digitalmars-d-learn
    • Re: Can a D... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
      • Re: Can... Liam McGillivray via Digitalmars-d-learn
        • Re:... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
          • ... Liam McGillivray via Digitalmars-d-learn
            • ... cc via Digitalmars-d-learn
              • ... Liam McGillivray via Digitalmars-d-learn
              • ... Liam McGillivray via Digitalmars-d-learn
                • ... Liam McGillivray via Digitalmars-d-learn
                • ... Liam McGillivray via Digitalmars-d-learn
                • ... cc via Digitalmars-d-learn
      • Re: Can... Liam McGillivray via Digitalmars-d-learn

Reply via email to