首页 > 作文

c++中的bind使用方法

更新时间:2023-04-04 10:31:37 阅读: 评论:0

除了容器有适配器之外,其实函数也提供了适配器,适配器的特点就是将一个类型改装成为拥有子集功能的新的类型。其中函数的适配器典型的就是通过std::bind来实现。

std::bind函数定义在头文件functional中,是一个函数模板,它就像一个函数适配器,接受一个可调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。一般而言,我们用它可以把一个原本接收n个参数的函数fn,通过绑定一些参数,返回一个接收m个(m可以大于n,但这么做没什么意义)参数的新函数。同时,使2020年高考理科数学用std::bind函数还可除法的初步认识ppt以实现参数顺序调整等操作。

如可调用 (callable) 中描述,调用指向非静态成员函数指针或指向非静态数据成员指针时,首参数必须是引用或指针(可以包含智能指针,如 std::shared_ptr 与 std::unique_ptr),指向将访问其成员的对象。

官方示例

#include <random>#include <iostream>#include <memory>#include <functional> void f(int n1, int n2, int n3, const int& n4, int n5){    std::cout << n1 << ' ' << n2 << ' ' << n3 << ' ' << n4 << ' ' << n5 << '\n';} int g(int n1){    return n1;} struct foo {    void print_sum(int n1, int n2)    {        std::cout << n1+n2 << '\n';    }    int data哄女朋友小故事 = 10;}; int main(){    using namespace std::placeholders;  // 对于 _1, _2, _3...     // 演示参数重排序和按引用传递    int n = 7;    // ( _1 与 _2 来自 std::placeholders ,并表示将来会传递给 f1 的参数)    auto f1 = std::bind(f, _2, 42, _1, std::cref(n), n);    n = 10;    f1(1, 2, 1001); // 1 为 _1 所绑定, 2 为 _2 所绑定,不使用 1001                    // 进行到 f(2, 42, 1, n, 7) 的调用     // 嵌套 bind 子表达式共享占位符    auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5);    f2(10, 11, 12); // 进行到 f(12, g(12), 12, 4, 5); 的调用     // 常见使用情况:以分布绑定 rng    std::default_random_剑网3职业engine e;    std::uniform_int_distribution<> d(0, 10);    std::function<int()> rnd = std::bind(d, e); // e 的一个副本存储于 rnd    for(int n=0; n<10; ++n)        std::cout << rnd() << ' ';    std::cout << '\n';     // 绑定指向成员函数指针    foo foo;    auto f3 = std::bind(&foo::print_sum, &foo, 95, _1);    f3(5);     // 绑定指向数据成员指针    auto f4 = std::bind(&foo小学生好人好事::data, _1);    std::cout << f4(foo) << '\n';     // 智能指针亦能用于调用被引用对象的成员    std::cout << f4(std::make_shared<foo>(foo)) << '\n'              << f4(std::make_unique<foo>(foo)) << '\n';}

输出:

2 42 1 10 7
12 12 12 4 5
1 5 0 2 0 8 2 2 10 8
100
10
10
10

到此这篇关于c++中的bind使用方法的文章就介绍到这了,更多相关c++ bind使用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 10:31:36,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/cd8f1c8776fc219af61f5499df34e779.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:c++中的bind使用方法.doc

本文 PDF 下载地址:c++中的bind使用方法.pdf

下一篇:返回列表
标签:函数   指针   参数   绑定
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图