Get specific functions of unknown type at runtime?

Jacob Carlborg doob at me.com
Sun Dec 16 23:17:26 PST 2012


On 2012-12-17 02:39, F i L wrote:
> My goal is this, to have an XML file:
>
>      <!-- scene.xml -->
>      <scene>
>          <object class="Person" event="greet"/>
>      </scene>
>
> and a D file:
>
>      module person;
>
>      import std.stdio;
>
>      class Person
>      {
>          void greet() {
>              writeln("hello");
>          }
>      }
>
> and then another D file:
>
>      module main;
>
>      import person;
>      import std.xml;
>      import std.file;
>
>      static class Engine
>      {
>          static void delegate() event;
>          static void callEvent() { event(); }
>      }
>
>      void main() {
>          auto doc = new Document(read("scene.xml"));
>          auto className = /* find class name in xml file */;
>          auto eventName = /* find event name in xml file */;
>          auto obj = Object.factory(className);
>
>          Engine.event = /* get 'eventName' void in 'obj' */;
>
>          for (/* some loop */) { Engine.callEvent(); }
>      }
>
> So yeah, basically is is possible to create a general object, then look
> at it's members at runtime? Through maybe a .classinfo or something? Or
> is this level of runtime reflection simply not supported in D (yet)? If
> so, what are my best alternative options here?

For the serialization part you could have a look at Orange:

https://github.com/jacob-carlborg/orange

It won't handle the dynamic methods though.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list