Epoll을 기반으로 C++에서 비동기 패턴 Reactor를 구현하고 있습니다. 첫째, 우리는 스토리지 모델을 구성하는 방법을 기능을 한 후, 영원히 실행 방법 hand_events는,File_descriptor 및 Handle in Reactor 패턴 저장소 모델
void Reactor::handle_events(){
epoll_wait(..)
for(event in events){
//call the handle corresponding to the file descriptor return from epoll
//event.data.fd ==> handle
handle(...)
}
}
내 질문이라고
template<typename Handle>
void Reactor::register(int descriptor, Handle handle){
//add this descriptor to epoll for monitoring
//store this handle with the key is the descriptor
}
그리고를 호출하여 원자로와 파일 기술자를 등록합니다 이 상황에서 : 핸들 핸들과 파일 기술자와 핸들 간의 매핑 (어떤 적합한 패턴이 있습니까?)
답변을보기를 원합니다!
Pilebor : 문제입니다. 나는 원자로 패턴을 일반화하고 싶다. ==> 서명을 고치고 싶지는 않다. ==> 핸들을 전달하기위한 템플릿을 사용했다. ==> 다른 아이디어가 있습니까, 아니면 boost :: asio가 어떻게이 문제를 해결할 수 있는지 알고 있습니까? – khanhhh89
@ khanhhh89 업데이트 된 대답처럼 이벤트 핸들러를 등록 할 때'std :: bind'를 사용할 수 있어야합니다. –
@ khanhhh89 그리고 Boost ASIO는'std :: bind' 또는'boost :: bind'와의 함수 바인딩을 사용하여 이것을 해결하지만 여전히 고정 된 시그니처를 가지고 있습니다. 핸들러는 _this_ 순서로 적어도 _these_ 인수를 취해야합니다. 그러나 'bind'의 마술을 사용하면 필요할 경우 더 많은 것을 취할 수 있습니다. –