C++ 中std::function各种使用方法和例程
Posted 商汤科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 中std::function各种使用方法和例程相关的知识,希望对你有一定的参考价值。
C++ 中 std::function 是一个通用的函数封装器,可以用来包装任何可调用对象(例如函数、成员函数、lambda 表达式等),并且可以像函数一样调用包装后的可调用对象。以下是 std::function 的各种使用方法和例程:
- 使用函数指针
#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;
- 使用 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;
- 使用 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;
- 使用成员函数和对象指针
#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;
- 使用成员函数和对象引用
#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;
- 使用函数对象
#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;
- 使用函数对象和模板
#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;
}
以上是关于C++ 中std::function各种使用方法和例程的主要内容,如果未能解决你的问题,请参考以下文章
C++ std::vector 作为 std::function 的参数
C++ 11 std::function std::bind使用
存储在向量中的 C++ std::function 不起作用