Universidad de Magallanes

Investigación


Dirección de Investigación


facebook twitter youtube
02 de agosto del 2019

callback 함수 예제 c++

불행히도 C ++는 이와 같은 것을 제공하지 않습니다. myObject.foo는 개체 포인터와 myObject 및 멤버 함수 포인터 foo의 조합입니다. C++에는 이 두 포인터를 결합하는 포인터 유형이 없습니다. 따라서 함수에 대한 포인터 (Callee ::staticCallbackFunction)와 개체 (및 callleelee)에 대한 “this”포인터를 호출을 다시 수행 할 클래스로 보냅니다. 이것은 우리가 다시 얻을 필요가 있는 모든 것입니다. 함수 포인터는 콜백이 가질 수 있는 `가장 간단한` 유형입니다(일반성, 가독성 측면에서 는 틀림없이 최악) 다음 예제에서는 부동 개 필드가 정렬됩니다. 콜백 템플릿을 사용하는 방법에 대한 보다 복잡한 예는 다음과 같습니다: 호출자는 간단한 std:::function을 사용하여 콜백을 저장하고 실제 호출은 매우 간단합니다. 그러나 콜백 함수 및 함수 포인터는 동의어가 아닙니다. 함수 포인터는 언어 메커니즘이지만 콜백 함수는 의미 체계 개념입니다. 함수 포인터는 콜백 함수를 구현하는 유일한 방법은 아닙니다 – 당신은 또한 functors 및 정원 다양한 가상 기능을 사용할 수 있습니다. 함수 호출을 콜백으로 만드는 것은 함수를 식별하고 호출하는 데 사용되는 메커니즘이 아니라 호출의 컨텍스트 및 의미 체계입니다. 호출 함수가 호출 함수라고 말하는 것은 호출 함수와 호출되는 특정 함수 간의 일반적인 분리보다 더 큰 것을 의미하며, 호출자와 호출 자 간의 느슨한 개념적 결합을 의미하며 호출자는 무엇을 명시적으로 제어할 수 있습니다.

호출됩니다. 함수 포인터를 사용하는 것이 아니라 콜백 함수를 만드는 느슨한 개념 적 커플링 및 호출자 기반 함수 선택의 퍼지 개념입니다. 따라서 라이브러리 디자이너는 알림 콜백을 통해 프로그래머에게 제공되는 정보로 어떤 일이 발생하는지 결정하는 일을 담당하지 않으며 논리 콜백에 의해 제공되기 때문에 함수 값을 실제로 결정하는 방법에 대해 걱정할 필요가 없습니다. . 라이브러리 사용자로 인해 이러한 작업을 올바르게 수행하는 것은 라이브러리를 더 슬림하고 일반화된 것으로 유지합니다. 참고 : 대부분의 답변은 C ++에서 “콜백”논리를 달성 할 수있는 한 가지 가능성인 함수 포인터를 다루지만, 오늘날에는 가장 유리한 것이 아닙니다. 이 암호화 함수는 문자열의 모든 문자를 1씩 증가시입니다. 콜백은 클래스 또는 함수에서 허용하는 호출 가능(아래 참조)이며 해당 콜백에 따라 현재 논리를 사용자 지정하는 데 사용됩니다. 일부 언어에는 일반적으로 이벤트 및 이벤트 처리와 관련된 명시적 콜백 의미 체계가 있는 기능이 포함됩니다.

예를 들어 C#에는 콜백 개념을 중심으로 명시적으로 설계된 구문및 의미 체계가 있는 이벤트 형식이 있습니다. Visual Basic에는 대리자 또는 함수 포인터의 개념을 추상화하면서 메서드를 콜백 함수로 명시적으로 선언하는 Handles 절이 있습니다. 이러한 경우 콜백의 의미 체계 개념은 언어 자체에 통합됩니다. 그래서 여기 C ++11에서 std::function이 있으므로 함수 포인터와 유사한 것들이 필요하지 않습니다 : 람다 함수와 Rich Hickey의 템플릿 functor 접근 법 사이에는 두 가지 주요 차이점이 있습니다. 첫째, std::function을 사용하는 대신 약간 더 어설픈 CBFunctor* 형식을 사용해야 합니다.

inicio atrás arriba

DESTACADOS

  • LINKS


  • Dirección de Investigación

    Investigación • Avenida Bulnes 01890 • Punta Arenas • Chile
    Teléfono: +56 61 2 209 397 • Email: dir.investigacion@umag.cl