opDispatch and compile time parameters

Nikolay via Digitalmars-d digitalmars-d at puremagic.com
Sat Oct 17 08:30:58 PDT 2015


I asked on SO question about opDispatch and compile time 
parameters: 
http://stackoverflow.com/questions/32998781/opdispatch-and-compile-time-parameters

Currently it looks like it is not possible to use opDispatch for 
non trivial template functions. I think opDispatch should get 
function name plus evaluated compile time arguments as first 
compile time parameter. E.g not just function name "b", but 
"b.p2!(int, 10)"  See example from SO question:

import std.stdio;

class B{
     auto p1(T)(T arg) {
         writeln( "p1: ", arg );
     }
     auto p2(T, int C)(T s) {
         writeln( "p2: ", s, " / ", C);
     }
}

class C(T) {
     T b = new T;

     auto opDispatch(string s, Args...)(Args args) {
        mixin("b."~s)(args);
     }
}

void main() {
     auto b = new C!(B)();
     //fine: compiler is smart enough
     b.p1("abc");
     //oops: "no property 'p2' for type ..."
     b.p2!(int, 10)(5);
     auto origB = new B;
     //fine:
     origB.p2!(int, 10)(5);
}

Is it good idea for opDispatch improvement or may there is some 
other approach?


More information about the Digitalmars-d mailing list