현재 사용중인 프로젝트의 간단한 수신기/콜백 메커니즘을 구성 중입니다. 그리고 컨테이너 구조를 구현하는 데 방해가됩니다. 포인터의 벡터 벡터가되어야합니다. 루트 벡터에 단순한 이벤트 유형의 KEY가 있기를 원하기 때문에이 방법을 선택합니다. enum (int)을 말한 다음이 키에서이 이벤트 유형에 사용할 수있는 메서드에 대한 포인터 벡터를 저장하려고합니다. 같은 논리적 표현 무언가 :(member) 함수 포인터의 벡터 벡터
[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);
등 ...
정말 쉽게 고유 키 할당을 위해 벡터 대신지도를 사용 하시겠습니까? 감사합니다.