On Tuesday, 9 September 2025 at 00:40:31 UTC, Brother Bill wrote:
https://tour.dlang.org/tour/en/gems/opdispatch-opapply

This states: "Any unknown member function call to that type is passed to opDispatch, passing the unknown member function's name as a string template parameter."

So I tried that.  But the compiler didn't like it.
How should I play the game of passing in an unknown member function name?

Hopefully this slightly modified, and commented version of your original code will
help you understand why your mixin is failing:

```d
import std.stdio;

void main() {
    CallLogger!C l;
    l.callA(1, 2);
    l.callB("ABC");

// CallLogger does not have method called "callHome", but it has opDispatch, so // the compiler will lower this down to l.opDispatch("callHome", "foo", "bar")
    l.callHome("foo", "bar");
}

struct C {
    void callA(int i, int j) {
    }

    void callB(string s) {
    }

// Your mixin generates code that calls C.callHome which did not exist
    void callHome(string a, string b) {
        writeln(a, "/", b);
    }
}

struct CallLogger(C) {
    C content;
    void opDispatch(string name, T...)(T vals) {
        writeln("called ", name);

        // Now it works, because C now has callHome method
        mixin("content." ~ name)(vals);
    }
}
```

Reply via email to