How to call binary functions on primitive on runtime?

Jonathan M Davis jmdavisProg at gmx.com
Sat Feb 12 11:11:59 PST 2011


On Saturday 12 February 2011 10:49:15 Tom wrote:
> how can I make an implementation of some thing like Foo:
> >> assert(Foo("+", 1, 2) == 1+2);
> >> assert(Foo("*", 3, 2) == 3*2);
> 
> without writing a long switch with case for each operator like:
> >> switch (oper) {
> >> 
> >>   case "+": return a+b;
> >>   ..
> >> 
> >> }
> 
> I know how to implementation a compile-time equivalent with the mixin
> statement. thanks.

D really doesn't do stuff like that at runtime. It's fantastic at creating code 
for you at compile time. But you just don't create functions at runtime in D. 
Things don't work that way. So, if you want to create a templated function that 
uses mixins and/or static if, you can do that quite easily. But if you want to 
somehow construct functions at runtime, you're out of luck. The closest that 
you'll get is opDispatch, and that still does doesn't do what you're looking 
for. By it's very nature, it would have to use a case statement or something 
similar.

Really, in D, to do the sort of thing you're trying to do, you do it at compile 
time with templates and string mixins.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list