On Thursday, 27 June 2024 at 18:51:19 UTC, Josh Holtrop wrote:
Questions:
4. Any other general improvements to my solution?


I know it's kind of an unpopular choice these days but one could go
with inheritance and polymorphism or instanceof tests. something
along the lines of
```d
import std.stdio : writeln;

class Item
{
    public void operationA()
    {
    }

    public void operationB()
    {
    }
}

class ItemA : Item
{
    override public void operationA()
    {
        writeln("ItemA");
    }
}

class ItemB : Item
{
    override public void operationB()
    {
        writeln("ItemB");
    }
}

void main(string[] args)
{
    auto items = [new ItemA(), new ItemB()];
    writeln("operation a:");
    foreach (item; items)
    {
        item.operationA();
    }
    writeln("operation b:");
    foreach (item; items)
    {
        item.operationB();
    }

    writeln("instance of:");
    foreach (item; items)
    {
        if (auto itemB = cast(ItemB) item)
        {
            writeln("Found an ItemB");
        }
    }
}
```

drawback might be, that if you add a new subtype the compiler will
not warn you that you did not implement one case for one of the
implementations.

Kind regards,
Christian

Reply via email to