On Wednesday, 17 April 2024 at 03:13:46 UTC, Liam McGillivray wrote:
Is there a way I can replace "`TypeB`" in the function parameters with another symbol, and then define that symbol to accept `TypeB` as an argument, but also accept `TypeA` which would get converted to `TypeB` using a function? I'm willing to make a function template if it's rather simple.

Of course, if these were classes, this is classic inheritance and polymorphism. It would be trivial to subclass the library's version and still have it accepted by things which knew how to use the parent class. Or the library specified an interface, you could again use the polymorphism.

The closest I got was using function overloads, attached.

Andy

import std.stdio : writeln;

struct Foo {
    int x;

    void doit() {
        writeln(this.x);
    }
}

struct Bar {
    int y;

    // No doit()
}

void
myop(Foo f) {
    f.doit();
}

void
myop(Bar b) {
    auto f = Foo(b.y);
    f.doit();
}

void
main()
{
    auto b = Bar(3);
    b.myop();
}

Reply via email to