Reflection in D

medhi558 via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 28 01:23:50 PST 2017


abstract class NetworkMessage
{
     uint MessageId;
     //....
}

override class QueueStatusUpdateMessage : NetworkMessage
{
     uint MessageId = 1;
     //....
}

override class Message2 : NetworkMessage
{
     uint MessageId = 2;
     //....
}

override class Message3 : NetworkMessage
{
     uint MessageId = 3;
     //....
}

And I would like to retrieve all the classes that are based on 
NetworkMessage.

class ProtocolMessageManager
{
     private static TypeInfo_Class[uint] m_types;

     public static void Init()
     {
         foreach(mod; ModuleInfo)
	{
	    foreach(TypeInfo_Class lc; mod.localClasses)
	    {
                 if(....) //lc is NetworkMessage so
                 {
                     NetworkMessage c = 
cast(NetworkMessage)lc.create();
	            ProtocolMessageManager.m_types[c.MessageId] = lc;
                 }
	    }
					
	}
     }

     public static NetworkMessage GetInstance(string id)
     {
	auto v = (id in ProtocolMessageManager.m_types);
	if (v !is null)
	 return 
cast(NetworkMessage)ProtocolMessageManager.m_types[id].create();
	else
          return null;
     }
}



More information about the Digitalmars-d-learn mailing list