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