c++ callback 함수 예제

이제 이 호출의 출력은 이전과 다릅니다. API를 동일하게 유지하고 데이터를 전달했지만 API의 동작이나 결과로 전달된 콜백을 변경했습니다. 이제 응용 프로그램이 이 프레임워크 API를 호출하여 메시지를 빌드하면 해당 로컬 함수에 대한 포인터를 인수로 전달합니다. 콜백을 등록하려면 정적 멤버 함수의 함수 포인터를 참조해야 합니다. std::바인드는 또 다른 C++11 추가입니다. std::bind를 사용하면 대상 함수(또는 호출 가능한 개체)에 대한 래퍼 역할을 하는 std:::function 개체를 만들 수 있습니다. std::bind를 사용하면 특정 인수를 고정 된 값으로 유지하면서 다른 인수 변수를 유지할 수 있습니다. 다음은 다양한 인수 수의 콜백 메서드에 대해 여러 인터페이스를 표시하기 위해 일반적인 CallBack 클래스를 오버로드하기 위한 간단한 템플릿 패턴의 데모입니다. CallBack 클래스 아래의 예제에서 단순화를 위해 0에서 4까지 다양한 인수 수를 가진 메서드를 지원할 수 있으며 이론적으로 더 추가할 수 있습니다. 다음은 예제 저장소 유형입니다. 레지스터 함수는 거의 동일하게 보이지만 나중에 std:::function 개체를 조회하는 데 사용되는 uint32_t를 반환합니다. std::bind는 인스턴스 와 메서드 포인터를 모두 사용하여 함수 개체를 만들 수 있습니다. 이렇게 하면 특정 개체의 멤버 함수를 콜백 함수로 지정할 수 있습니다.

필드는 정렬할 필드의 첫 번째 요소를 가리키며, nElements는 필드의 항목 수이며, sizeOfAnElement는 바이트로 한 항목의 크기와 cmpFunc은 비교 함수에 대한 포인터입니다. 이 비교 함수는 두 개의 void 포인터를 가져와 int를 반환합니다. 함수 포인터를 함수 정의의 매개 변수로 사용하는 방법은 약간 이상하게 보입니다. 그냥 검토, 함수 포인터를 정의 하는 방법 그리고 당신은 볼 거 야, 그것은 정확 하 게 동일. 콜백은 일반 함수 호출이 수행되는 것처럼 수행됩니다. 이것은 아래와 같습니다. 참고: 함수 포인터 이외의 모든 호출 인수는 관련 사물에 초점을 맞추기 위해 생략되었습니다. 다음 2 개의 클래스가 존재하고 메서드B()를 콜백 메서드로 사용한다고 가정할 수 있습니다. 코드에서 메서드B()가 클래스 A의 매개 변수로 호출될 때 methodB()가 클래스 A에서 메서드 output()을 호출하는 것을 볼 수 있습니다. 콜백이 실제로 효과가 있다는 증거는 “나는 클래스 A :D”라는 대사를 볼 수 있다는 것입니다.

stdout에서. API의 동작 또는 결과는 우리가 제공하는 콜백에 따라 달라집니다. 람다 함수는 “익명 함수”라고도 합니다.