멤버 함수를 glut 또는 다른 라이브러리에 전달하는 것은 충분히 쉽습니다. GLUT 함수 포인터를 찾고있다.
컨트롤러를 glutKeyboardFunc로 보내려는 OnKeyPress 멤버 함수가있는 클래스로 지정하십시오. 해당 클래스 객체의 멤버 함수를 보낼부터 먼저 여기
glutKeyboardFunc(&Controller::OnKeyPress);
같은 것을 시도하는 유혹 수 있습니다, 우리는 함수 포인터를 전달하는, 그러나 이것은 잘못된 것입니다. C++ 11에서는 새로운 std::bind을 사용할 수 있습니다. 또는 이전 컴파일러를 사용하는 경우 boost::bind을 권장합니다. 어느 쪽이든 구문은 동일합니다.
using namespace std::placeholders; // for the _1, _2 placeholders
glutKeyboardFunc(std::bind(&Controller::OnKeyPress, &GLInput, _1, _2, _3));
설명서에서 glutKeyboardFunc에는 3 개의 매개 변수가 필요합니다. 먼저 멤버 함수이므로 객체의 첫 번째 인수 메모리 주소를 수정 한 다음 3 개의 자리 표시자를 제공합니다.
std :: bind에 익숙하지 않은 사람들은 이상하게 느껴진다.하지만 C에서 객체 지향 코드를 작성한 사람이라면 누구나 알 수있다. 함수는 실제로는 C 함수이며 클래스에 대한 "this"포인터가 필요합니다. 콜백이 간단한 함수 인 경우에는 바인드가 필요하지 않습니다.
답변을 주셔서 감사합니다. 지금은 "간단한 데모"이지만, GLFW를 살펴 보겠습니다. GLUT를위한 해결책에 관해서, 좋아, 나는 그 방향으로 다소 생각하고 있었다. – KWyckmans