我正在处理 C++ 中的事件处理并处理事件通知,我有一个 EventGenerator 类,任何生成事件的类都可以从该类继承。EventGenerator 有一个其他类可以用来添加回调的方法和一个在事件发生时调用回调的方法
为了处理不同类型事件的通知,我在模板类型 T 上对 EventGenerator 进行了参数化,然后通知程序类可以从 EventGenerator 继承多次对不同类型进行参数化。
为了完整起见,这里是 EventGenerator 的代码
#ifndef _EventGenerator
#define _EventGenerator
#include <list>
#include "EventListener.h"
template <class Event>
class EventGenerator {
private:
std::list<EventListener<Event>*> listeners;
protected:
EventGenerator() {}
void changeEvent(Event event) {
std::list<EventListener<Event>*>::const_iterator it = listeners->begin();
for (; it != listeners->end(); it++) {
(*it)->changeEvent(event);
}
}
public:
void addListener(EventListener<Event>* listener) {
listeners->push_back(listener);
}
};
#endif
这是 EventListener 的代码,任何想要添加回调的类都继承自 -
#ifndef _EventListener
#define _EventListener
template <class Event>
class EventListener {
private:
EventListener(const EventListener<Event>& event);
protected:
EventListener() {}
public:
virtual void changeEvent(Event event) = 0;
};
#endif
我觉得这不是一个很好的设计,我想知道是否有更好的设计来解决这样的问题。
编辑:困扰的是我使用多重继承这一事实。我经常被警告不要使用它,所以我想我想就这样的设计是否会导致将来发生不好的事情发表意见
谢谢