"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 클래스 멤버 및`std :: function '을 사용하여 일반적인 C ++ 콜백을 구현하는 방법?

클래스 멤버 및`std :: function '을 사용하여 일반적인 C ++ 콜백을 구현하는 방법?

2025-03-22에 게시되었습니다
검색:764

How to Implement Generic C   Callbacks Using Class Members and `std::function`?

이벤트 핸들러를 사용하여보다 현대적인 C 접근법을 사용할 수 있습니다. 함수 객체는 일반 기능 포인터처럼 통과 할 수있는 호출 가능한 엔티티를 나타냅니다. 이벤트 핸들러 방법 Addhandler는 전달 된 함수가 리턴 값이없고 인테르를 인수로 취하는 인수로서 std :: function 을 취합니다.

클래스 이벤트 핸들러 { 공공의: void addhandler (std :: function 콜백) { cout 특정 함수 바인딩

특정 클래스 메소드를 이벤트 핸들러에 바인딩하기 위해 STD :: BIND가 사용됩니다. std :: bind 이벤트가 트리거 될 때이 포인터와 호출 할 함수를 지정합니다.

class myclass { 공공의: myclass (); // 참고 : 더 이상 '정적'이 표시되지 않으며 실제 인수 만 취합니다. 무효 콜백 (int x); 사적인: int private_x; }; myclass :: myclass () { 네임 스페이스 사용 std :: 자리 표시 자 사용; //`_1` private_x = 5; handler-> addhandler (std :: bind (& myclass :: Callback, this, _1)); } void myclass :: 콜백 (int x) { // 더 이상 명시적인 '인스턴스'인수가 필요하지 않습니다. //`this '가 제대로 설정되어 있습니다 cout class EventHandler { public: void addHandler(std::function callback) { cout 독립형 함수 및 lambda 함수

콜백이 클래스 컨텍스트없이 독립형 함수 인 경우 std :: bind가 필요하지 않습니다. { // ... } int main () { // ... handler-> addhandler (FreestandingCallback); }

익명 콜백의 경우 Lambda 기능은 이벤트 핸들러와 함께 사용할 수 있습니다. 다른 클래스 및 기능에 적용 할 수있는 콜백을위한 유연하고 일반적인 솔루션.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3