>  기사  >  백엔드 개발  >  std::bind는 멤버 함수를 어떻게 처리하며 객체 참조가 필요한 이유는 무엇입니까?

std::bind는 멤버 함수를 어떻게 처리하며 객체 참조가 필요한 이유는 무엇입니까?

DDD
DDD원래의
2024-10-31 23:47:29527검색

How does std::bind handle member functions, and why is an object reference required?

std::bind가 멤버 함수와 함께 작동하는 방식

std::bind를 멤버 클래스 함수와 함께 사용할 때 몇 가지 핵심 개념이 작용합니다. :

첫 번째 인수: 포인터

std::bind(&Foo::print_sum, &foo, 95, _1) 구문에서 첫 번째 인수는 아닙니다 사람들이 가정하는 것처럼 함수 포인터에 대한 참조입니다. 대신, 멤버 함수 자체를 나타내는 포인터입니다.

두 번째 인수: 객체 참조

두 번째 인수, 이 경우 &foo 는 적절한 클래스(Foo)의 객체에 대한 참조입니다. 이는 멤버 함수가 작동하려면 객체 인스턴스가 필요하기 때문에 필요합니다.

std::bind가 멤버 함수를 처리하는 방법

내부적으로 std::bind는 첫 번째 인수는 멤버 함수에 대한 포인터이며 std::mem_fn을 사용하여 이를 호출 가능한 객체로 변환합니다. 이 호출 가능 개체는 멤버 함수에 대한 포인터를 유지하며 첫 번째 인수로 개체 인스턴스가 필요합니다.

객체 참조의 필요성

멤버 함수에 바인딩하는 경우 의 경우 멤버 함수가 특정 클래스와 연결되어 있고 해당 클래스의 개체를 호출해야 하기 때문에 개체 참조가 필수적입니다. std::bind의 두 번째 인수는 이 개체 참조를 제공하여 멤버 함수가 지정된 개체에서 작동할 수 있도록 합니다.

다음 코드를 고려하세요.

<code class="cpp">struct Foo {
    int value;
    void f(int n) { std::cout << "f(" << this->value << ", " << n << ")\n"; }
};

int main() {
    Foo foo{10};

    auto f_bound = std::bind(&Foo::f, &foo, _1);
    f_bound(20); // Output: f(10, 20)
}</code>

이 예에서 f_bound는 수신한 추가 인수를 사용하여 foo 객체에서 f 멤버 함수를 호출하는 호출 가능 객체입니다. 따라서 f_bound(20)를 호출하는 것은 "f(10, 20)"을 인쇄하는 foo.f(20)를 호출하는 것과 동일합니다.

위 내용은 std::bind는 멤버 함수를 어떻게 처리하며 객체 참조가 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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