Generating code based on UDA
    Ali Çehreli via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Sat Oct 25 14:35:43 PDT 2014
    
    
  
On 10/25/2014 08:56 AM, Rares Pop wrote:
 > Indeed it worked. What is the rationale behind the mixin(fullName) ?
__traits(getAttributes) requires a symbol but fullName is a string. 
Mixing it in as code fulfills the requirement.
 > However, in my project the injections function, the @Inject UDA struct
 > and some other dependencies are defined in a library (libinfuse).
I am afraid it needs to be changed. :-/
 > In this format the compiler gives the undefined identifier error I was
 > mentioning in my first post.
 > "source/infuse/injector.d-mixin-148(148): Error: undefined identifier B"
I found two solutions:
a) Do not define 'attributes' at all and use __traits(getAttributes) 
directly in the foreach loop:
     foreach (attr; __traits(getAttributes, mixin(fullName))) {
b) Define attributes as a typeof of __traits(getAttributes) and use that 
in the foreach loop:
     alias attributes = typeof(__traits(getAttributes, mixin(fullName)));
     foreach (attr; attributes) {
I think what happens in both cases is that the entity that we iterate 
over maintains its TypeTuple'ness without trying to produce a value out 
of its members.
 > Is this a dmd compiler bug?
I don't know but it is very confusing.
Ali
    
    
More information about the Digitalmars-d-learn
mailing list