이기종 클래스 간 콜백 전달
C에서는 다양한 클래스 간에 공유할 수 있는 콜백을 정의하는 것이 어려울 수 있습니다. 정적 멤버 함수를 제공하고 클래스 인스턴스에 포인터를 전달하는 것이 일반적인 접근 방식이지만 유연성이 제한됩니다. C 11의 std::function 및 std::bind:
Refactoring EventHandler
정적 메서드와 인스턴스 포인터 대신 리팩터링EventHandler는 std::function:
class EventHandler { public: void addHandler(std::function<void(int)> callback) { // ... (as above) } };을 수용합니다. 이 함수는 정수 인수를 취하고 아무것도 반환하지 않는 "함수 객체"를 수용합니다.
MyClass 조정
수정MyClass는 콜백에서 정적 키워드를 제거하고 대신 인수를 제공합니다.
class MyClass { public: void Callback(int x); // ... }; MyClass::Callback(int x) { // ... (as above) }
콜백을 에 바인딩하려면 EventHandler 사용 std::bind:
handler->addHandler(std::bind(&MyClass::Callback, this, std::placeholders::_1));
_1 자리 표시자는 단일 인수를 나타냅니다.
독립형 함수 및 람다 표현식
독립형 기능을 직접 사용할 수 있습니다.addHandler:
void freeStandingCallback(int x) { // ... } handler->addHandler(freeStandingCallback);또한
addHandler:
handler->addHandler([](int x) { std::cout << "x is " << x << '\n'; });
내에서 C 11 람다 표현식을 사용할 수 있습니다
채용으로std::function 및 std::bind, 콜백은 이기종 클래스 간에 원활하게 전달될 수 있어 유연성과 코드 재사용성을 제공합니다.
위 내용은 C 11의 `std::function` 및 `std::bind`는 이기종 클래스 콜백 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!