callback 함수 예제 c++

콜백은 지정된 시간에 인수를 다시 호출(실행)할 것으로 예상되는 다른 코드에 대한 인수로 전달되는 실행 가능한 코드입니다[Source : Wiki]. 간단한 언어로 함수의 참조가 함수를 호출하는 인수로 다른 함수에 전달되면 콜백 함수로 호출됩니다. C++에서 콜백을 사용하는 방법은 다음과 같습니다. 4개의 파일을 가정합니다. 한 쌍의 . CPP/. 각 클래스에 대한 H 파일. 클래스 C1은 콜백하려는 메서드가 있는 클래스입니다. C2는 C1의 메서드를 다시 호출합니다. 이 예제에서 콜백 함수는 독자를 위해 추가 한 1 매개 변수를 사용합니다. 이 예제에서는 인스턴스화되고 사용되는 개체가 표시되지 않습니다. 이 구현의 한 가지 사용 사례는 데이터를 읽고 임시 공간에 저장하는 클래스와 데이터를 처리하는 다른 클래스가 있는 경우입니다. 콜백 함수를 사용하면 모든 데이터 행에 대해 콜백을 읽은 다음 처리할 수 있습니다.

이 기술은 필요한 임시 공간의 오버헤드를 줄입니다. 많은 양의 데이터를 반환한 다음 사후 처리해야 하는 SQL 쿼리에 특히 유용합니다. 수락 된 대답은 포괄적이지만 여기에 간단한 예제를 넣으려는 질문과 관련이 있습니다. 오래 전에 작성한 코드가 있었습니다. 나는 순서대로 트리를 통과하고 싶었습니다 (왼쪽 노드 다음 루트 노드 다음 오른쪽 노드) 한 노드에 도달 할 때마다 모든 것을 할 수 있도록 임의의 함수를 호출 할 수 있기를 원했습니다. * 참고 : 데이터 멤버에 대한 포인터는 호출 할 수 있지만 함수는 전혀 호출되지 않습니다. DoItB 함수는 콜백을 의미하는 클래스 TClassB의 개체를 통해 작업을 수행합니다. 정적 함수 TClassB::래퍼_To_Call_Display에 대한 포인터가 DoItB에 전달됩니다. 이 래퍼는 콜백 함수입니다. 래퍼는 전역 변수 void* pt2Object를 사용하고 이를 TClassB의 인스턴스에 명시적으로 캐스팅합니다. 올바른 클래스 인스턴스를 가리키도록 전역 변수를 항상 초기화하는 것이 매우 중요합니다. TClassB와 같은 임의의 다른 클래스를 작성하고 이러한 다른 클래스가 필요한 함수를 제공하는 한 DoItB와 함께 사용할 수 있습니다.

참고: 이 솔루션은 변경할 수 없는 기존 콜백 인터페이스가 있는 경우에 유용할 수 있습니다. 전역 변수를 사용하는 것은 매우 위험하며 심각한 오류를 일으킬 수 있으므로 좋은 해결책이 아닙니다. 이제 새로운 유형의 암호화 함수를 디자인할 수 있으며, 이 방법은 상속 및 다형성을 활용하여 콜백을 구현합니다. 콜백 인터페이스에 두 개 이상의 함수가 필요한 경우 특히 효과적입니다. 이 방법의 문제는 단일 호출 전화를 동일한 호출자의 여러 인스턴스에 연결하려는 경우입니다. 예를 들어, 서너 개의 타이머를 만들고 다른 콜백 함수(예: onOneSecondTimer(), onTwoSecondTimer(…)에서 각 타이머를 처리하려는 경우….). 인터페이스 클래스는 특정 함수 이름을 사용하도록 강요하므로 이 작업을 수행할 수 없습니다.