> 백엔드 개발 > C++ > 콜백은 어떻게 C 코드 기능을 향상시킬 수 있습니까?

콜백은 어떻게 C 코드 기능을 향상시킬 수 있습니까?

DDD
풀어 주다: 2024-12-10 18:22:12
원래의
500명이 탐색했습니다.

How Can Callbacks Enhance C   Code Functionality?

C의 콜백

콜백은 함수나 클래스에서 허용하는 호출 가능한 객체로, 콜백을 기반으로 현재 로직을 맞춤설정하는 데 사용됩니다.

사용 시기 콜백:

  • 호출된 함수의 로직과 독립적인 일반 코드 작성
  • 동적 런타임 동작 활성화(예: 게임에서 버튼 기능 변경)
  • 특정 사항을 발신자에게 알림 events.

C 11의 호출 가능:

콜백은 다양한 형식을 취할 수 있으며 모두 "호출 가능"으로 간주됩니다.

  • 함수 포인터
  • std::함수 객체
  • 람다 표현식
  • 바인드 표현식
  • 함수 객체(오버로드된 함수 호출 연산자가 있는 클래스)

콜백 표기법:

1. 함수 포인터

  • typedef return_type (*f_int_t) (int);
  • int (* foo_p)(int) = &foo;
  • int 푸바(int x, int (*moo)(int));
  • int foobar (int x, f_int_t moo);

2. 멤버 함수에 대한 포인터

  • typedef int (C::* f_C_int_t) (int x);
  • int (C::* C_foo_p)(int) = & C::foo;
  • int C_foobar(int x, C const &c, int (C::*moo)(int));
  • int C_foobar (int x, C const &c, f_C_int_t moo);

3. std::함수 객체

  • std::function stdf_foo = &foo;
  • int stdf_foobar (int x, std::function moo);

4. 템플릿 콜백

이를 통해 더욱 일반적인 코드를 사용할 수 있습니다.

  • template void stdf_transform_every_int_templ(int * v, unsigned const n, std::function fp);
  • 템플릿 voidTransform_every_int_templ(int * v, unsigned const n, F f);

호환 가능한 콜백 유형:

  • 함수 포인터: 기능 포인터
  • std::function 객체: 함수 포인터, 람다 표현식, 바인드 표현식, 함수 객체
  • 템플릿 콜백: 모든 호출 가능 유형(예: , 람다 표현식, 바인드 표현식, 함수 객체)

예:

  • 함수 포인터 예:

    void tranform_every_int(int * v, unsigned n, int (*fp)(int));
    int double_int(int x) { return 2*x; }
    int square_int(int x) { return x*x; }
    로그인 후 복사
  • std::function 개체 예:

    void stdf_tranform_every_int(int * v, unsigned n, std::function<int(int)> fp);
    int a[5] = {1, 2, 3, 4, 5};
    stdf_tranform_every_int(&amp;a[0], 5, Meow{8});
    로그인 후 복사
  • 템플릿 콜백 예:

    int nine_x_and_y (int x, int y) { return 9*x + y; }
    using std::placeholders::_1;
    stdf_transform_every_int_templ(&amp;a[0], 5, std::bind(nine_x_and_y, _1, 4));
    로그인 후 복사

위 내용은 콜백은 어떻게 C 코드 기능을 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿