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 중국어 웹사이트의 기타 관련 기사를 참조하세요!