2017-12-02 21 views
0

현재 작은 응용 프로그램 클래스를 개발 중입니다. SDL2에서 통증을 줄이기위한 특정 단계를 수행해야합니다. 하나는 내가 파생 클래스 (응용 프로그램 클래스는 기본 인터페이스)를 구현할 때 현재 SDL_Event가 자동으로 전달되도록 사용자가 처리 할 수 ​​있도록 handleEvent라는 함수가 오버로드되도록하고 싶습니다.SDL이 순수 가상 멤버 함수를 이벤트 콜백으로 호출하도록 하시겠습니까?

삽입 된 SDL 함수 SDL_AddEventWatch를 사용하여 콜백을 작성하면 스레드를 시작한 다음 새 이벤트를 수동으로 확인하고 멤버 함수를 호출하는 것이 낫다고 생각했습니다.

그러나 SDL Documentation for the function은 멤버 함수를 "필터"로 사용하지 않습니다. 그리고 순수한 가상 멤버 함수를 사용하고 있습니다!

내 관점에서 볼 때이 함수가 필요로하는 유일한 매개 변수는 처리 할 짝수에 대한 포인터입니다. 그러나이 포인터는 사용자가 클래스의 내용을 간단히 변경할 수 있도록 액세스해야합니다.

이것을 구현하는 적절한 방법은 무엇입니까?

+2

코드는 어디에 있습니까? – Phil1970

+0

코드없이 문제를 볼 수 없습니다. 콜백 객체를 반복하고 원하는 것을 호출하고 SDL 이벤트 콜백으로 설정하는 함수를 작성하십시오. 이벤트 큐는 자체적으로 채워지지 않으며 여전히'SDL_PumpEvents'를 호출해야합니다. – keltar

답변

1

libffi의 클로저를 사용하여 예상되는 서명과 일치하는 인스턴스 주위에 래퍼를 만들 것입니다. 클로저를 초기화하는 데 사용되는 함수는 저장된 인스턴스 매개 변수와 SDL이 전달한 모든 매개 변수를 가상 함수로 전달합니다.

+0

필자는이 특별한 대답을 사용하지 않았다. 매우 구체적인 해결책은 더 쉬웠다. 그러나 나는 이것을 시도했지만 잘 작동한다. – MoustacheSpy