首页 > 后端开发 > C++ > `std::bind` 如何与 C 中的成员函数一起工作?

`std::bind` 如何与 C 中的成员函数一起工作?

Barbara Streisand
发布: 2024-10-29 21:38:30
原创
825 人浏览过

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

了解 std::bind 与成员函数

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板