converting a string function name to an actual function call

Bill Baxter dnewsgroup at billbaxter.com
Tue Nov 27 10:11:21 PST 2007


oliver wrote:
> Hi everyone,
> 
> is it possible to program kind of a general function that applies the name of a function (given as a char [] ) to arguments. The following code does not work but something in the same spirit.
> 
> Thanks once more to this very patient group.
> Oliver
> 
> -------
> 
> import std.stdio;
> 
> int f1( int a ) { 
>     return a+1;
> }
> 
> int f2( int b ) { 
>     return b-10;
> }
> 
> int apply(char [] name, int arg) {
>     return name(arg);
> }
> 
> int main() {
>     int i = 1;
>     i = f1(i);
>     writefln("i: ",i);
>     i = f2(i);
>     writefln("i: ",i);
>     i = apply( "f1", i );
>     i = apply( "f2", i );
>     writefln("i: ",i);
>     return 0;
> }
> 

For compile-time strings that's what the string mixin does:

int apply(char[] name)(int arg) {
     mixin("return " ~ name ~ "(arg);")
}
int i=1;
i = apply!("f1")(i);

For runtime string -- no dice.  You'll need to make a map of strings to 
function pointers or a big switch statement.

Maybe DDL gives you a way to emulate this via functions in DLLs but it's 
not a feature of the language itself.

--bb


More information about the Digitalmars-d-learn mailing list