일반 std::function 객체에 멤버 함수 포인터 저장
다음을 사용하여 맵에 특정 클래스의 멤버 함수 포인터를 저장하려고 할 때 std::function 개체를 사용하는 경우 개발자는 "term이 0개의 인수를 사용하는 함수로 평가되지 않습니다."라는 오류가 발생할 수 있습니다. 이 오류는 멤버 함수 포인터를 std::function 객체에 직접 할당할 때 발생합니다.
문제의 핵심은 비정적 멤버 함수가 첫 번째 인수로 암시적 "this" 포인터를 요구한다는 사실에 있습니다. . 이를 수정하려면 첫 번째 인수를 명시적으로 바인딩해야 합니다.
해결책:
std::functionf = std::bind(&Foo::doSomething, this);
이 접근 방식은 "this" 포인터를 첫 번째 인수로 효과적으로 바인딩하여 std::function 객체가 멤버 함수.
매개변수가 있는 함수 처리:
매개변수가 있는 멤버 함수의 경우 바인딩된 인수의 위치를 나타내기 위해 자리 표시자를 지정해야 합니다.
using namespace std::placeholders; std::functionf = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
C 11 람다 구문:
컴파일러가 C 11 람다를 지원하는 경우 보다 간결한 접근 방식을 활용할 수 있습니다.
std::functionf = [=](int a, int b) { this->doSomethingArgs(a, b); };
이러한 기술을 따르면 개발자는 일반 std::function 개체를 사용하여 멤버 함수 포인터를 효과적으로 저장하고 호출할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3