>백엔드 개발 >C++ >일반 `std::function` 객체에 멤버 함수 포인터를 저장하는 방법은 무엇입니까?

일반 `std::function` 객체에 멤버 함수 포인터를 저장하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-23 20:39:10262검색

How to Store Member Function Pointers in Generic `std::function` Objects?

일반 std::function 객체에 멤버 함수 포인터 저장

다음을 사용하여 특정 클래스의 멤버 함수 포인터를 맵에 저장하려고 할 때 std::function 개체를 사용하는 경우 개발자는 "term이 0개의 인수를 사용하는 함수로 평가되지 않습니다."라는 오류가 발생할 수 있습니다. 이 오류는 멤버 함수 포인터를 std::function 객체에 직접 할당할 때 발생합니다.

문제의 핵심은 비정적 멤버 함수가 첫 번째 인수로 암시적 "this" 포인터를 요구한다는 사실에 있습니다. . 이를 수정하려면 첫 번째 인수를 명시적으로 바인딩해야 합니다.

해결책:

std::function<void(void)> f = std::bind(&Foo::doSomething, this);

이 접근 방식은 "this" 포인터를 첫 번째 인수로 효과적으로 바인딩하여 다음을 허용합니다. std::function 객체를 사용하여 멤버 함수를 올바르게 캡처합니다.

다음을 사용하여 함수 처리 매개변수:

매개변수가 있는 멤버 함수의 경우 바인딩된 인수의 위치를 ​​나타내기 위해 자리 표시자를 지정해야 합니다.

using namespace std::placeholders;
std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs,
                                                 this,
                                                 std::placeholders::_1,
                                                 std::placeholders::_2);

C 11 Lambda 구문:

컴파일러가 C 11 람다를 지원하는 경우 더 간결한 접근 방식은 다음과 같습니다. 활용:

std::function<void(int, int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};

이러한 기술을 따르면 개발자는 일반 std::function 개체를 사용하여 멤버 함수 포인터를 효과적으로 저장하고 호출할 수 있습니다.

위 내용은 일반 `std::function` 객체에 멤버 함수 포인터를 저장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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