Java和C#各自的事件处理技术不同。在Java中,您可以编写程序可以调用的接口或类。在C#中,使用事件和委托以不同方式完成。
C ++是否有某种形式的事件处理?
我的理解是Java事件是这样完成的:
class Class1
{
private ArrayList<MyEventListener> listeners;
//Class stuff
public void doEvent () {for(MyEventListener e : listeners) {e.eventHappened(args);}
public void addToListeners(MyEventListener eventListener) {listeners.add(eventListener);
public void removeFromListeners(MyEventListener eventListener) {listeners.add(eventListener);
public interface MyEventListener
{
void eventHappend (Anything passable);
}
}
我想C ++可以类似地完成
Define new Class
{
Define Array (Java ArrayList/List) of the abstract class or interface below
//Define other unrelated class stuff
Define add to listeners function
Define remove from listeners function
Define inner interface (maybe a C++ abstract class would work instead as interfaces don't exist in C++) to act as event
Define function in inner abstract event class to be the actual part of the code that represents the event
Define call all listeners function
}
这有意义吗?老实说,如果没有事件监听器/处理程序系统,我怎么能看不出任何东西呢?我认为我很接近。
你是如何处理来自其他语言的事件的?
答案 0 :(得分:3)
C ++就像Java没有内置的事件机制一样。它只是一种设计模式,您也可以在许多其他语言中实现。 Java事件机制的直接翻译可能如下所示:
class Class1 {
private:
std::vector<MyEventListener*> listeners;
public:
void doEvent () {
for(MyEventListener* e : listeners) {e->eventHappened(args);
}
void addToListeners(MyEventListener* eventListener){
listeners.push_back(eventListener);
}
void removeFromListeners(MyEventListener* eventListener){
listeners.push_back(eventListener); // same bug as in your java version :P
class MyEventListener {
virtual void eventHappend (Anything passable) = 0;
virtual ~MyEventListener(){}
};
};