• std::bind()功能学习


    转自:https://blog.csdn.net/Jxianxu/article/details/107382049

    1.介绍

    std::bind的头文件是 <functional>,它是一个函数适配器,接受一个可调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。

    std::bind返回一个基于f的函数对象,其参数被绑定到args上。f的参数要么被绑定到值,要么被绑定到placeholders(占位符,如_1, _2, ..., _n)。

    主要作用:

    • 将可调用对象和其参数绑定成一个仿函数;
    • 只绑定部分参数,减少可调用对象传入的参数。

    2.绑定普通函数

    double callableFunc (double x, double y) {return x/y;}
    auto NewCallable = std::bind (callableFunc, std::placeholders::_1,2);  
    std::cout << NewCallable (10) << '\n';                       
    • bind的第一个参数是函数名,普通函数做实参时,会隐式转换成函数指针。因此std::bind(callableFunc,_1,2)等价于std::bind (&callableFunc,_1,2);
    • _1表示占位符,位于<functional>中,std::placeholders::_1;
    • 第一个参数被占位符占用,表示这个参数以调用时传入的参数为准,在这里调用NewCallable时,给它传入了10,其实就想到于调用callableFunc(10,2);

    3.绑定类对象的成员函数

    class Base
    {
        void display_sum(int a1, int a2)
        {
            std::cout << a1 + a2 << '\n';
        }
        int m_data = 30;
    };
    int main() 
    {
        Base base;
        auto newiFunc = std::bind(&Base::display_sum, &base, 100, std::placeholders::_1);
        f(20); // should out put 120. 
    }
    • bind绑定类成员函数时,第一个参数表示对象的成员函数的指针,第二个参数表示对象的地址。
    • 必须显示的指定&Base::diplay_sum,因为编译器不会将对象的成员函数隐式转换成函数指针,所以必须在Base::display_sum前添加&;
    • 使用对象成员函数的指针时,必须要知道该指针属于哪个对象,因此第二个参数为对象的地址 &base;

    4.绑定引用参数

    如果函数声明中的形参类型是引用,那么在bind时可以通过ref()函数来绑定参数。

  • 相关阅读:
    详解 Python3 正则表达式(四)
    详解 Python3 正则表达式(一)
    Python之禅
    人生感悟
    详解 Python3 正则表达式(五)
    作用域与带有循环变量的默认参数相比较问题
    详解 Python3 正则表达式(三)
    python学习笔记:第三天(数字)
    python学习笔记:第四天( 字符串)
    python学习笔记:第二天(基本数据类型)
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/16725788.html
Copyright © 2020-2023  润新知