【发布时间】:2014-01-31 15:31:54
【问题描述】:
我正在尝试用 C++ 编写一个非常简单的事件或消息类。我希望事件保存发生时间和特定于事件类型的一些数据。 我目前拥有的是以下内容
class EventData{
public:
virtual ~EventData(void) = 0;
};
struct Event{
Event(EventType type, Time time, EventData *data = nullptr):
type_(type), time_(time), data_(data)
{}
~Event(void){
if(data_) delete data_;
}
//Disable copying, event memory will be managed by EventManager
Event(const Event& other) = delete;
const EventType type_;
const Time time_;
const EventData *data_;
};
在我的主循环中,我有这样的东西,
bool running = true;
while(running){
const Event* nextEvent = evtManager.getNextEvent();
switch(nextEvent.type_){
case EVT_A:
const EventAData* data = static_cast<EventAData*>(nextEvent.data_);
//do stuff
break;
}
...
case EVT_END:
running = false;
break;
}
}
那么问题是是否有更有效的方法来做到这一点,即使用模板。另一个问题是有人可能不小心给出了错误的EventType、EventData 对,在这种情况下static_cast 将失败。
我应该注意,我希望这个Event 类尽可能快,尤其是对time_ 成员变量的访问。
【问题讨论】: