C++ 中std::function各种使用方法和例程

Posted 商汤科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 中std::function各种使用方法和例程相关的知识,希望对你有一定的参考价值。

C++ 中 std::function 是一个通用的函数封装器,可以用来包装任何可调用对象(例如函数、成员函数、lambda 表达式等),并且可以像函数一样调用包装后的可调用对象。以下是 std::function 的各种使用方法和例程:

  1. 使用函数指针
    #include <iostream>
    #include <functional>
    
    int add(int a, int b) 
        return a + b;
    
    
    int main() 
        std::function<int(int, int)> f = add;
        std::cout << f(1, 2) << std::endl; // 输出 3
        return 0;
    
    

  2. 使用 lambda 表达式
    #include <iostream>
    #include <functional>
    
    int main() 
        std::function<int(int, int)> f = [](int a, int b) 
            return a + b;
        ;
        std::cout << f(1, 2) << std::endl; // 输出 3
        return 0;
    
    

  3. 使用 std::bind 绑定函数和参数
    #include <iostream>
    #include <functional>
    
    int add(int a, int b) 
        return a + b;
    
    
    int main() 
        std::function<int()> f = std::bind(add, 1, 2);
        std::cout << f() << std::endl; // 输出 3
        return 0;
    
    

  4. 使用成员函数和对象指针
    #include <iostream>
    #include <functional>
    
    class MyClass 
    public:
        int add(int a, int b) 
            return a + b;
        
    ;
    
    int main() 
        MyClass obj;
        std::function<int(int, int)> f = std::bind(&MyClass::add, &obj, std::placeholders::_1, std::placeholders::_2);
        std::cout << f(1, 2) << std::endl; // 输出 3
        return 0;
    
    

  5. 使用成员函数和对象引用
    #include <iostream>
    #include <functional>
    
    class MyClass 
    public:
        int add(int a, int b) 
            return a + b;
        
    ;
    
    int main() 
        MyClass obj;
        std::function<int(int, int)> f = std::bind(&MyClass::add, std::ref(obj), std::placeholders::_1, std::placeholders::_2);
        std::cout << f(1, 2) << std::endl; // 输出 3
        return 0;
    
    

  6. 使用函数对象
    #include <iostream>
    #include <functional>
    
    class Add 
    public:
        int operator()(int a, int b) 
            return a + b;
        
    ;
    
    int main() 
        Add addObj;
        std::function<int(int, int)> f = addObj;
        std::cout << f(1, 2) << std::endl; // 输出 3
        return 0;
    
    

  7. 使用函数对象和模板
    #include <iostream>
    #include <functional>
    
    template<typename T>
    class Add 
    public:
        T operator()(T a, T b) 
            return a + b;
        
    ;
    
    int main() 
        Add<double> addObj;
        std::function<double(double, double)> f = addObj;
        std::cout << f(1.1, 2.2) << std::endl; // 输出 3.3
       
    

C++ std::function怎么用

类模版std::function是一种通用、多态的函数封装。

std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。

如下中的

typedef std::function<int(int)> Functional;

最外层的int为返回值类型,里层int为参数类型

#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <string>
#include <algorithm>
#include <functional>
#include <memory>

using namespace std;

typedef std::function<int(int)> Functional;

int TestFunc(int a)  
{  
    return a;  
}

int main()
{
    Functional obj = TestFunc;    
    int res = obj(1);
    std::cout << res << std::endl;

    while(1);
    return 0;
}

https://blog.csdn.net/qq_23350817/article/details/90035124

以上是关于C++ 中std::function各种使用方法和例程的主要内容,如果未能解决你的问题,请参考以下文章

C++ std::vector 作为 std::function 的参数

C++ std::function技术浅谈

C++ 11 std::function std::bind使用

存储在向量中的 C++ std::function 不起作用

muduo库中的核心:std::bind和std::function

C++ std::function 参数 const 参考