Hey Robert, so how do I get all methods of a type? This doesn't work in D1.

Now suppose that get() is somewhere in a library that isn't aware of object 
Person and of a template. Because that is the problem with libraries and 
especially DLL's. It needs to be more dynamic. Theoretically, it should be 
possible to extract everything out of Person without knowing any of the 
particular behavior of that class. So accessing fields, writing to fields, etc. 
should be possible with such libraries.

You still could write your own reflection library on top of tupleof. The only problem is, that you need to make all members known to that reflection library, before you can access them from any runtime context. For example, you could pass all types to a compile time function of your reflection library:

    Reflection.register!(Person);

This call would instantiate template code to grab all members of Person using tupleof. That code would produce your own extended RTTI about the passed type. Then the library can map TypeInfo or ClassInfo to that extended RTTI type. You could get the RTTI information even from a DLL (as long as the runtime is shared between the DLL and the host code.)

The problem is, that you have to litter your code with calls like above. Even with D2's glorious __traits, this problem persist: you have to pass all types manually to some piece of compile time code.

Now, dear D Gods, how are we supposed to solve this problem? Could we (at least) get a way to list all members of a module with __traits? (Wow, a function crawling all modules recursively at compile time sure would produce a lot of template bloat.)

Reply via email to