Traits problem

Daniel Ribeiro Maciel daniel.maciel at gmail.com
Sat Dec 5 07:57:54 PST 2009


The strange part is that, for some reason, this works:


import std.stdio: writeln;

class Foo {
    float bla() { return 0.0; }
    void foo() {}
}

void exportObject( TClass, members... )()
{
    foreach( uint i, member; members )
        writeln( typeid(typeof(__traits(getVirtualFunctions, Foo, members[i]) )) ); 
}

void main() {
    exportObject!( Foo, "bla", "foo" )();
}

Daniel Ribeiro Maciel Wrote:

> Heya!
> 
> Ok, let me explain what I want to do:
> 
> 
>  import std.stdio: writeln;
>  
>  class Foo {
>      float bla() { return 0.0; }
>      void foo() {}
>  }
>  
>  void main() {
>      enum string[] members = __traits(allMembers, Foo );
>      foreach( member; members )
>          writeln( typeid(typeof(__traits(getVirtualFunctions, Foo, member) )) );
> }
> 
> Is that possible?
> 
> Best regards,
> Daniel
> 
> 
> bearophile Wrote:
> 
> > Daniel Ribeiro Maciel:
> > 
> > Try this:
> > 
> > import std.stdio: writeln;
> > 
> > class Foo {
> >     float bla() { return 0.0; }
> >     void foo() {}
> > }
> > 
> > void main() {
> >     enum string[] members = ["bla", "foo"];
> >     writeln( typeid(typeof(__traits(getVirtualFunctions, Foo, members[0]) )) );
> > }
> > 
> > Output: (float())
> > You need enum there, unfortunately. Also note the position of [], the lack of traits import, the qualified import from std.stdio, the void return of main, and so on.
> > 
> > Bye,
> > bearophile
> 




More information about the Digitalmars-d mailing list