std::function()是C++标准库中的一个通用多态函数包装器, 它可以存储,复制和调用任意可调用目标(函数,lambda表达式,绑定表达式或其他函数对象).
std::function占用固定尺寸的内存 . 它允许我们将可调用对象(函数,函数指针,Lambda表达式等) 包装成一个对象, 使得我们可以像操作其他对象一样操作和传递可调用对象
std::function是C++引入的标准库和组件,它位于 <functional>头文件中, 它主要作用就是将可调用对象封装成一个函数对象,提供一种统一的方式来处理各种类型的可调用对象
#include <functional>
std::function的基本语法如下
std::function<返回类型(参数类型1,参数类型2,....)>func;
1. 封装函数
#include <iostream> #include <functional> void greet() { std::cout << "Hello, Beijing!" << std::end1; } int main() { std::function<void()> func = greet; func(); //调用封装的函数 return 0; }
2. 封装Lambda表达式
#include <iostream> #include <functional> int main() { std::function<void()> func = [](){ std::cout << "Lambda function test!" << std::end1; }; func(); //调用封装的lambda表达式 return 0; }
3. 封装可调用对象 (仿函数)
#include <iostream> #include <functional> class Greet { public: void operator()() const{ std::cout << "functor test!" << std::end1; } }; int main() { std::function<void()> func = Greet(); func(); //调用封装的仿函数 return 0; }
看完上面这几个例子,我们来了解一下std::function的实现原理
std::function通常使用类型擦除和小对象优化(Small Object Optimization, SOO) 来实现
标签:std,function,调用,封装,C++,func,include From: https://www.cnblogs.com/wphl-27/p/18582158