클래스 멤버 함수를 콜백으로 전달할 때 컴파일 오류 극복
오해로 인해 클래스 멤버 함수를 콜백으로 전달할 때 컴파일 오류가 발생합니다. 멤버의 구문 및 숨겨진 "this" 매개변수에 대해
멤버 함수 명확화
멤버 함수는 독립형 함수가 아니라 추가 숨겨진 "this" 포인터가 있는 함수입니다. 이 포인터는 함수가 속한 클래스의 인스턴스를 참조합니다. 클래스 인스턴스 구문(예: object.memberFunction())을 사용하여 멤버 함수를 호출하면 컴파일러는 "this"의 값을 자동으로 결정합니다.
구문 수수께끼
&CLoggersInfra::RedundencyManagerCallBack을 콜백으로 전달하려고 시도했기 때문에 초기 접근 방식이 실패했습니다. 이 함수 포인터에는 필요한 "this" 포인터가 없습니다. 올바른 구문은 다음과 같습니다.
m_cRedundencyManager->Init(std::bind(&CLoggersInfra::RedundencyManagerCallBack, this));
숨겨진 "this" 공개
CLoggersInfra 클래스의 특정 인스턴스와 관련된 콜백을 전달하려고 합니다. 숨겨진 "this" 포인터를 설명하려면 이를 명시적으로 바인딩해야 합니다.
std::bind1st 및 Boost::bind Rescue
std::bind1st 사용 또는 Boost::bind를 사용하여 "this" 포인터를 바인딩하여 인스턴스를 숨겨진 매개변수로 사용하고 평소와 같이 콜백의 원래 매개변수를 사용하는 새 함수를 만듭니다. 이렇게 하면 컴파일 문제가 해결됩니다.
The Hidden Catch
Init에는 Boost::bind가 기본적으로 제공하지 않는 원시 함수 포인터가 필요합니다. 그러나 StackOverflow는 Boost::functions를 원시 포인터로 변환하는 솔루션을 제공합니다.
Lambda 함수를 사용한 C 11 업데이트
C 11 이상에서는 캡처하는 람다 함수 "this"는 이러한 목적으로 Boost::bind를 대체할 수 있습니다.
위 내용은 C에서 클래스 멤버 함수를 콜백으로 올바르게 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!