Исходя из Java, C #, если в C ++ нет обработки событий, как можно ловить, когда что-то происходит?

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
}

Имеет ли это смысл? Я, честно говоря, не могу понять, как можно программировать что-либо без системы прослушивания / обработки событий, я предполагаю, что я близок.

Как вы справились с событиями, пришедшими с другого языка?

-1

Решение

В 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(){}
};
};
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]