I'm a java developer and currently learning C++. To do so I thought I could just try to code some programs I did in Java in C++; And here's my question: If in Java I have following class-architecture:
abstract class Event {}
class Event1 extends Event {/*define some variables and methods here*/}
class Event2 extends Event {/*define some variables and methods here*/}
class MyEventListeners {
public void event1Listener(Event1 event){/*do something*/}
public void event2Listener(Event2 event){/*do something*/}
}
class someclass {
void somemethod(){
eventHandlerInstance.add(myEventListenersInstance.getClass().getMethod("event1Listener", null);
eventHandlerInstance.add(myEventListenersInstance.getClass().getMethod("event2Listener", null);
//OR!
eventHandlerInstance.add(myEventListenersInstance);
}
void someOtherMethod(){
eventHandlerInstance.fireEvent(new Event1()); // MyEventListeners#event1Listener gets called
}
}
class EventHandler {
HashMap<Event, List<Method>> listeners = new HashMap<Event, List<Method>>();
public void add(Method m){
if(m.getParameterTypes().length == 1 && m.getParameterTypes()[0].isAssignableFrom(Event.class){
listeners.get((Event)m.getParameterTypes()[0]).add(m);
}
}
public void add(Class c){
for(Method m : c.getDeclaredMethods()){add(m);}
}
public void fireEvent(Event e){
for(Event ev : listeners.keySet()){
if(e instanceof ev.getClass()){
for(Method m : listeners.get(ev)){m.invoke(e);}
}
}
}
}
This code probably wont work since I just wrote it down in two minutes, but it should visualize what I'm trying to do. The problem is, I heard that C++ doesnt support reflection... Is it possible to port this Java code to C++, and if yes, how?
Kind regards