C++11 的新特性5——统一函数对象的封装形式

  类模板 std::function 是通用多态函数包装器。 std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——函数(通过其指针)、 lambda 表达式、 bind 表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。

目录

函数包装器 

1、函数指针

2、仿函数

3、包装类内的方法

函数绑定器

1、bind类内成员函数时,改变调用接口的参数个数

2、绑定类外接口 

3、绑定仿函数


函数包装器 

1、函数指针

void func(int A)
{
    std::cout< f1=func;
f1(20);

2、仿函数

        什么是仿函数: 定义一个类,类里面重载函数运算符(),将该类的对象作为函数的入参,那么在函数中同样能调用重载符()里面的方法

class Func
{
public:
    void operator()(int a){std::cout< f2=Func();
f2(23);

3、包装类内的方法

class Test
{
public:
    Test(){ }
    Test(int numb):m_numb(numb){}
    int add(int a,int b,int c )const
    {
        return a+b+c;
    }

private:
    int m_numb;
};
//类内的方法, 
    /**
     * 对类内成员的函数,依赖于类的对象,所以需要一个类的对象
    */
std::functionf = &Test::add;
Test t;
std::cout<

函数绑定器

       注意:

 using namespace std; 全局使用注意事项
        在C库和C++库中,出现同名的情况下,使用using namespace std;//标准库
        会导致,无法使用C库的函数,所以在项目中少用全局标准库std

1、bind类内成员函数时,改变调用接口的参数个数

//bind类内成员函数时,改变调用接口的参数个数
    Test test_canshu;
    auto f_class_canshu = std::bind(&Test::add,&test_canshu,std::placeholders::_1,std::placeholders::_2,0);
    std::cout<

2、绑定类外接口 

// 绑定类外接口
    // 使用bind,和占位(placeholders) 配合使用,灵活控制参数的个数
    auto add_f = std::bind(add,std::placeholders::_1,std::placeholders::_2, 0);
    add_f(4,7); //两数相加

3、绑定仿函数

// 绑定仿函数
    // 把一函数变成另一个函数
    auto f_operator = std::bind(Func(),std::placeholders::_1);
    f_operator(5);
    f_operator(6);

你可能感兴趣的:(C++,c++,开发语言)