> 백엔드 개발 > C++ > `std::bind`는 C의 멤버 함수와 어떻게 작동합니까?

`std::bind`는 C의 멤버 함수와 어떻게 작동합니까?

Barbara Streisand
풀어 주다: 2024-10-29 21:38:30
원래의
824명이 탐색했습니다.

How does `std::bind` work with member functions in C  ?

멤버 함수로 std::bind 이해

C의 다용도 도구인 std::bind를 사용하면 나중에 호출할 수 있는 바인딩된 함수를 만들 수 있습니다. 멤버 함수와 함께 사용법을 이해하는 것은 어려울 수 있지만 이 논의는 관련된 복잡성을 밝히는 것을 목표로 합니다.

첫 번째 인수: 참조가 아닌 포인터

멤버에 대한 바인딩을 선언할 때 함수에서 std::bind의 첫 번째 인수는 멤버 함수에 대한 참조가 아니라 멤버 함수에 대한 포인터입니다. 이는 함수와 데이터 멤버가 인수로 전달되면 모두 포인터로 붕괴되기 때문입니다.

두 번째 인수: 객체 또는 포인터

멤버 함수를 처리할 때 std::bind의 두 번째 인수는 객체를 지정합니다. 또는 멤버 함수를 호출하는 데 사용되는 개체에 대한 포인터입니다. 이는 멤버 함수에 자신이 속한 객체를 가리키는 암시적 this 포인터가 있기 때문에 필요합니다.

내부 구현

내부적으로 std::bind는 포인터를 래핑하는 호출 가능 객체를 생성하는 것으로 보입니다. 멤버 함수에. 이 바인딩된 함수를 호출하면 지정된 개체가 this 포인터로 사용됩니다.

왜 개체에 대한 포인터인가요?

특정 개체에 독립적인 함수 포인터와 달리 멤버 함수 포인터는 자신이 속한 클래스에 연결되어 있지만 해당 클래스의 모든 개체와 함께 사용할 수 있습니다. std::bind는 멤버 함수를 처리할 때 객체 포인터를 두 번째 인수로 요구하여 이를 지원합니다.

다음 코드를 고려하세요.

<code class="cpp">struct Foo {
    void print_sum(int n1, int n2) { std::cout << n1 + n2 << '\n'; }
};

Foo foo;

auto f = std::bind(&Foo::print_sum, &foo, 95, _1);</code>
로그인 후 복사

여기서 예를 들어 std::bind의 첫 번째 인수는 &Foo::print_sum이며 이는 Foo 클래스 내의 멤버 함수 print_sum에 대한 포인터입니다. 두 번째 인수는 foo 객체에 대한 포인터인 &foo입니다. f를 호출할 때 &foo가 this 포인터로 사용되어 foo 객체에 대한 올바른 컨텍스트로 print_sum을 호출할 수 있습니다.

위 내용은 `std::bind`는 C의 멤버 함수와 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿