std::function 객체에서 멤버 함수 포인터를 처리하는 방법
std::function 객체 내에서 멤버 함수로 작업할 때 특정 합병증이 발생합니다. 발생할 수 있습니다. 다음 코드를 고려하십시오.
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
비정적 멤버 함수가 암시적으로 "this" 포인터를 인수로 전달하기 때문에 오류가 발생합니다. 그러나 여기의 std::function 서명은 이 인수를 설명하지 않습니다.
해결책: 멤버 함수를 std::function 개체에 바인딩
이 문제를 해결하려면, 첫 번째 인수("this")는 명시적으로 바인딩되어야 합니다.
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
매개변수가 있는 함수의 경우 자리 표시자는 다음과 같습니다. 활용:
using namespace std::placeholders; std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
C 11에서는 람다도 사용할 수 있습니다.
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };
이러한 기술을 통합함으로써 프로그래머는 std::function 객체 내에서 멤버 함수 포인터를 사용하여 성공적으로 작업할 수 있습니다. 암시적인 "this" 인수를 효과적으로 관리합니다.
위 내용은 std::function에서 멤버 함수 포인터를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!