Calling arbitrary functions at runtime?

ketmar via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Dec 11 14:25:39 PST 2016


import std.traits;
import std.stdio;


alias FDg = void delegate (string args);

FDg[string] cmdlist;

void register(DG) (string name, DG dg) if (isCallable!DG) {
   cmdlist[name] = delegate (string args) {
     import std.array : split;
     import std.conv : to;
     alias Args = Parameters!DG;
     auto spx = args.split(' ');
     Args ara;
     foreach (immutable idx, ref a; ara) {
       a = spx[idx].to!(typeof(a));
     }
     dg(ara);
   };
}


void main () {
   register("test", (int a, bool b) { writeln("a=", a, "; b=", b); 
});
   cmdlist["test"]("42 true");
}


More information about the Digitalmars-d-learn mailing list