Task

Demonstrate how to make the object respond (sensibly/usefully) to an invocation of a method on it that it does not support through its class definitions.

Note that this is not the same as just invoking a defined method whose name is given dynamically; the method named at the point of invocation must not be defined.

This task is intended only for object systems that use a dynamic dispatch mechanism without static checking.



Related task

   Send an unknown method call.


import std.stdio;
 
struct Catcher {
    void foo() { writeln("This is foo"); }
 
    void bar() { writeln("This is bar"); }
 
    void opDispatch(string name, ArgsTypes...)(ArgsTypes args) {
        writef("Tried to handle unknown method '%s'", name);
        if (ArgsTypes.length) {
            write(", with arguments: ");
            foreach (arg; args)
                write(arg, " ");
        }
        writeln();
    }
}
 
void main() {
    Catcher ca;
    ca.foo();
    ca.bar();
    ca.grill();
    ca.ding("dong", 11);
}