我正在为我当前的实验项目构建一个简单的侦听器/回调机制。而且我坚持实现一个容器结构,它似乎应该是指针向量的向量。我选择这种方式是因为我希望根向量简单地具有事件类型的 KEY 假设是一个枚举(int),然后在这个键上我想存储指向该事件类型的可用方法的指针向量。在逻辑表示中,例如:
[EVENT_TYPE_QUIT]
[ptr1]
[ptr2]
[ptr3]
[ptr4]
[....]
[EVENT_TYPE_HELLO]
[....]
[....]
typedef enum {
EVENT_TYPE_QUIT,
EVENT_TYPE_HELLO,
...
} EventType;
所以简化的实现看起来像这样(它实际上是一个模板,但想象一下 T 是您可以映射事件的任何用户类型)。
class EventMapper {
...
typedef void (T::*functionPtr)(); // simple pointer to T member function with no args.
std::vector< std::vector<functionPtr> > eventCallbacks;
void mapEvent(const EventType type, functionPtr callback) {
// here i need to map type to callback
// each type can have multiple callbacks
// T can have only distinct event types as "key"
// this i tried but doesn't work
eventCallbacks[type].push_back(callback);
}
...
}
预期的实现类似于:
EventMapper<SupaDupaClass> mapper;
mapper.mapEvent(EVENT_TYPE_HELLO, &SupaDupaClass::didYouSayHello);
ETC ...
我真的想使用矢量而不是地图来更轻松地分配唯一键吗?谢谢