digitalmars.D.learn - How can you call a stored function in an AA with proper number of
Here's the basic code I'm playing with: struct MyCmd { Variant func; // Has other members. } MyCmd[string] functions_; void addCommand(T)(const string name, T func) { MyCmd cmd; cmd.func = Variant(func); functions_[name] = cmd; } void process(string[] args) // args is only available at runtime. { const string name = args[0]; // Name of the command if(name in functions_) { MyCmd cmd = functions_[name]; cmd.func(/*Call with proper number of arguments converted to the proper type*/); } } I initially got idea from the D Cookbook Chapter Reflection: Creating a command-line function caller. But the code has to reside in the same module as the functions it will use. So I arrived at this code but can't figure out how to call the actual stored function. Thanks!
Jul 11 2016
Store a wrapper instead of the actual function: void wrapper(alias F)(string[] args) { (convert args to F arguments) and invoke } cmd.func = &wrapper!someFunc; string[] args; cmd.func(args);
Jul 12 2016
On Tuesday, 12 July 2016 at 08:34:03 UTC, Kagamin wrote:Store a wrapper instead of the actual function: void wrapper(alias F)(string[] args) { (convert args to F arguments) and invoke } cmd.func = &wrapper!someFunc; string[] args; cmd.func(args);Thanks that is clever. Never would have thought of that. Thanks a lot!
Jul 12 2016