来自Java,C#,如果C++没有事件处理,那么当发生某些事情时如何捕获

Coming from Java, C#, if C++ has no event handling, how does one catch when something happens?

本文关键字:何捕获 如果 Java C++ 事件处理 来自      更新时间:2023-10-16

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
}

这有意义吗?老实说,我看不出没有事件侦听器/处理程序系统如何编程任何东西,我想我已经很接近了。

你如何处理来自另一种语言的事件?

就像

Java没有内置的事件机制一样C++。它只是一种设计模式,您也可以在许多其他语言中实现。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(){}
    }; 
};
相关文章: