Can a D library have some types determined by the client program?
Liam McGillivray
yoshi.pit.link.mario at gmail.com
Fri Mar 8 23:20:59 UTC 2024
On Friday, 8 March 2024 at 16:54:48 UTC, cc wrote:
> If you don't want Unit to be a template, you can just have Map
> derive from a basic interface or abstract class. You can also
> have every relevant class share similar templates, you just
> need to remember to supply the template arguments everywhere.
Right. Interfaces. I haven't used this feature yet, but I had
read about them, thinking I would likely use them. I forgot about
them at the time of making this thread. I will try making Map &
Tile an interface, and maybe Unit as well.
Can an interface and a template have the same name, similar to
function overloading? In that case, `Map!Tile` would refer to the
template, while `Map` would be the interface. Maybe I'll have
figured this out myself by the time someone replies.
> You'll need to think about how much interoperation you want
> between these classes. Does Unit really need to know what
> TileType map is using, or can it just trust that when it asks
> Map to move, Map will handle everything related to tile types?
> Generally it's best practice to have as much of the inner
> workings isolated as possible and just provide methods to
> access functionality.
I don't think `Tile` and `Unit` will need to know the details of
what kind of Tile & Unit derivative the map is using.
As an aside on this topic, I wonder if my `Map` class and it's
derivative `Mission` are doing too many things. I don't know if
there is enough of a problem with one "master" class dominating
the program that it's worth splitting it up despite the more
complex programming.
>> After changing `class Unit` to `class Unit (TileType)`, it
>> complains about the line `Unit* occupant;` in Tile.
>
> Are you sure you need a pointer here? Class objects in D are
> already reference-type by default.
I'm pretty sure I do, as references can't be null. As an
approximation of what I'm doing, think of `Map` as a chess board,
`Tile` as a square on the board, and `Unit` as a chess piece. Not
every tile on the chess board is occupied by a piece.
If you want, you can see the program I have so far on [my GitHub
repository](https://github.com/LiamM32/Open_Emblem). Right now
the `master` branch is the most up-to-date, but I might soon make
a new branch to try out templates and interfaces.
More information about the Digitalmars-d-learn
mailing list