2017-04-01 1 views
0

콜백 함수에 람다 함수를 전달하기 만하면됩니다. 콜백에 std::function을 사용하고 있습니다. 이 함수에 데이터를 전달해야하는데 이것이 문제가되는 부분입니다. "예상 유형으로 변환 할 수 없습니다"라는 오류 아래의 코드. 목표는 SDL 인 이벤트에 콜백을 사용하는 것입니다. 이 일을하는 것이 올바른 길인지 잘 모르겠습니다. 나는 SDL_Event.type이고 vectorstd::functionunordered_map에 콜백 함수를 저장하고있다.std :: SDL 이벤트 콜백에 대한 lambda 오류가있는 함수

이벤트 폴링시 dispatch()을 호출하고 설치시 subscribe을 호출합니다. 오류가 subscribe() 람다

// main.cpp 
window->subscribe(SDL_KEYDOWN, [](SDL_Event& ev) -> void { 
    std::cout << "key pressed" << std::endl; 
}); 

// eventhandler.cpp 
void EventHandler::subscribe(int _event, std::function<void(const SDL_Event&)> _callback) 
{ 
    m_callbacks[_event].push_back(_callback); 
} 

답변

0

만든 아주 어리석은 실수의 []에서 발생 ... 매개 변수가 일치하지 않습니다. 올바른 코드는 아래에 있습니다. 나는. 나는 람다에 const을 가지고 있지 않았다 ...

window->subscribe(SDL_KEYDOWN, [](const SDL_Event& ev) -> void { 
    std::cout << "key pressed" << std::endl; 
}); 

void EventHandler::subscribe(int _event, std::function<void(const SDL_Event&)> _callback) 
{ 
    m_callbacks[_event].push_back(_callback); 
}