Function pointer from mangled name at runtime?

bitwise via Digitalmars-d digitalmars-d at puremagic.com
Mon Sep 4 13:07:14 PDT 2017


On Monday, 4 September 2017 at 06:54:53 UTC, Jacob Carlborg wrote:

> On 2017-09-01 22:53, bitwise wrote:
> I'm not sure how your serialization library works

Exhaustively. Entire modules or classes can be reflected 
recursively.

> or is intended to work.

*does ;)

> But at some point you need a static type to be able to do 
> something with the deserialized data.

Not really.

> The only exception is when serializing an object through a base 
> class reference

Exactly, but also when you want to change the value of a field at 
runtime from a visual inspector.


Example:

// backbone of a scene-graph
abstract class Node {
     @property const(Class) info() const;
     void update(){}
}

// use when inheriting Node
mixin template nodeInfo() {
     override @property const(Class) info() const {
         return reflect!(typeof(this))();
     }
}

abstract class Scene
{
     Node[] nodes;

     // enforce overridden Node.info() when adding node to scene
     TNode add(TNode : Node)(TNode node)
     {
         if(node.info.typeId != typeid(node))
         {
             writeln("warning: '", TNode.stringof, "' does not 
override Node.info()"
                     " - runtime behaviour may be incorrect.");
         }

         nodes ~= node;
         return node;
     }
}

class MyNode : Node
{
     mixin nodeInfo;
     override void update(){ /* stuff */ }
}



More information about the Digitalmars-d mailing list