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);
}
}
```