Destroy two assumptions: interface implementation generated by TMP

Baz via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Aug 11 11:21:02 PDT 2014


Hi, I try to get why the last way of generating an interface 
implementation fails. I've put assumptions: is it right ?
-------------------------------
module itfgen;

import std.stdio;

interface itf{
     void a_int(int p);
     void a_uint(uint p);
}

template genimpl(T){
     char[] genimpl(){
         char[] result;
         result = "void a_" ~ T.stringof ~ "("~ T.stringof ~ " 
p){}".dup;
         return result;
     }
}

class impl: itf{
     mixin(genimpl!int);
     mixin(genimpl!uint);
}

// OK because: mixin is at the source code level, begining of the 
ana
class impl2: itf{
     static char[] genimplint(T)(){
         char[] result;
         result = "void a_" ~ T.stringof ~ "("~ T.stringof ~ " 
p){}".dup;
         return result;
     }
     mixin(genimplint!int);
     mixin(genimplint!uint);
}

// FAILS because: alias are probably generated after the itf check
class impl3: itf{
     void tmp(T)(T p){};
     alias a_int = tmp!int;
     alias a_uint = tmp!uint;
}

void main(string args[]){
     auto I1 = new impl;
     auto I2 = new impl2;
     auto I3 = new impl3;
}
-------------------------------

I get

'Error: class itfgen.impl3 interface function 'void a_int(int p)' 
is not implemented'.




More information about the Digitalmars-d-learn mailing list