>백엔드 개발 >C++ >C 클래스 멤버 함수를 C 콜백 함수로 사용할 수 있나요?

C 클래스 멤버 함수를 C 콜백 함수로 사용할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-11 17:42:13309검색

Can a C   Class Member Function Be Used as a C Callback Function?

C 클래스 멤버 함수를 C 콜백 함수로 사용

C 클래스 멤버 함수를 C 콜백 함수로 등록 가능 , 그러나 충족해야 할 특정 요구 사항이 있습니다.

Q1: 우선 등록이 가능합니까? 제가 하려는 것과 같은 C 클래스 멤버 함수와 그렇다면 어떻게 할까요?

A1: 예, C 클래스 멤버 함수가 정적 함수로 선언된 경우 콜백 함수로 등록하는 것이 가능합니다. 기능. 정적 멤버 함수에는 비정적 멤버 함수와 달리 첫 번째 인수로 암시적 'this' 포인터가 없습니다. 이를 통해 C 콜백 함수의 서명과 호환될 수 있습니다.

Q2: 이 문제를 해결할 수 있는 대체/더 좋은 방법이 있습니까?

A2: 다음은 다음과 같습니다. 몇 가지 대체 옵션:

  • 무료 기능 만들기: 별도의 무료 기능 구현 콜백 함수 시그니처와 일치하는 (비멤버) 함수를 라이브러리에 등록합니다.
  • 함수 포인터 사용: C 클래스의 정적 멤버 함수에 대한 함수 포인터를 만듭니다. 함수 포인터를 라이브러리에 전달합니다. 이를 위해서는 라이브러리가 함수 포인터를 콜백 함수로 사용하는 것을 지원해야 합니다.
  • 래퍼 함수 사용: 원하는 클래스 멤버 함수를 호출하고 다음과 호환되는 서명이 있는 클래스 외부 래퍼 함수를 ​​정의합니다. C 콜백 함수. 그런 다음 라이브러리에 래퍼 함수를 ​​등록합니다.

정적 멤버 함수 사용 예:

class A {
public:
    A() { register_with_library(&A::e); }
    ~A() {}

    static int e(int *k, int *j) {
        return 0;
    }
};

위 내용은 C 클래스 멤버 함수를 C 콜백 함수로 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.