std::bind 是 C 中的多功能工具,允许创建绑定函数以供以后调用。理解其在成员函数中的用法可能具有挑战性,但本讨论旨在阐明所涉及的复杂性。
声明成员的绑定时函数中,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中文网其他相关文章!