std::function
参考资料
• cplusplus.com:http://www.cplusplus.com/reference/functional/function/
• cppreference.com:http://en.cppreference.com/w/cpp/utility/functional/function
std::function简介
• 类模板声明
// MS C++ 2013 template<class _Fty> class function; template<class _Fty> class function : public _Get_function_impl<_Fty>::type { ... }// GCC 4.8.2 template<typename _Signature> class function; template<typename _Res, typename... _ArgTypes> class function<_Res(_ArgTypes...)>: public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>, private _Function_base { ... } // cplusplus.comtemplate <class T> function; // undefined template <class Ret, class... Args> class function<Ret(Args...)>;
• 类模板说明
std::function是一个函数包装器模板,最早来自boost库,对应其boost::function函数包装器。在c++0x11中,将boost::function纳入标准库中。该函数包装器模板能包装任何类型的可调用元素(callable element),例如普通函数和函数对象。包装器对象可以进行拷贝,并且包装器类型仅仅只依赖于其调用特征(call signature),而不依赖于可调用元素自身的类型。
一个std::function类型对象实例可以包装下列这几种可调用元素类型:函数、函数指针、类成员函数指针或任意类型的函数对象(例如定义了operator()操作并拥有函数闭包)。std::function对象可被拷贝和转移,并且可以使用指定的调用特征来直接调用目标元素。当std::function对象未包裹任何实际的可调用元素,调用该std::function对象将抛出std::bad_function_call异常。
• 模板参数说明
以cplusplus.com中描述的原型说明:
T : 通用类型,但实际通用类型模板并没有被定义,只有当T的类型为形如Ret(Args...)的函数类型才能工作。
Ret : 调用函数返回值的类型。
Args : 函数参数类型。
std::function详解
• 包装普通函数
#include <iostream> #include <functional> using namespace std;int g_Minus(int i, int j) {return i - j; }int main() {function<int(int, int)> f = g_Minus;cout << f(1, 2) << endl; // -1return 1; }
• 包装模板函数
#include <iostream> #include <functional> using namespace std;template <class T> T g_Minus(T i, T j) {return i - j; }int main() {function<int(int, int)> f = g_Minus<int>;cout << f(1, 2) << endl; // -1return 1; }
• 包装lambda表达式
#include <iostream> #include <functional> using namespace std;auto g_Minus = [](int i, int j){ return i - j; };int main() {function<int(int, int)> f = g_Minus;cout << f(1, 2) << endl; // -1return 1; }
• 包装函数对象
非模板类型:
#include <iostream> #include <functional> using namespace std;struct Minus {int operator() (int i, int j){return i - j;} };int main() {function<int(int, int)> f = Minus();cout << f(1, 2) << endl; // -1return 1; }
模板类型:
#include <iostream> #include <functional> using namespace std;template <class T> struct Minus { T operator() (T i, T j){return i - j;} };int main() {function<int(int, int)> f = Minus<int>();cout << f(1, 2) << endl; // -1return 1; }
• 包装类静态成员函数
非模板类型:
#include <iostream> #include <functional> using namespace std;class Math { public:static int Minus(int i, int j){return i - j;} };int main() {function<int(int, int)> f = &Math::Minus;cout << f(1, 2) << endl; // -1return 1; }
模板类型:
#include <iostream> #include <functional> using namespace std;class Math { public:template <class T>static T Minus(T i, T j){return i - j;} };int main() {function<int(int, int)> f = &Math::Minus<int>;cout << f(1, 2) << endl; // -1return 1; }
• 包装类对象成员函数
非模板类型:
#include <iostream> #include <functional> using namespace std;class Math { public:int Minus(int i, int j){return i - j;} };int main() {Math m;function<int(int, int)> f = bind(&Math::Minus, &m, placeholders::_1, placeholders::_2);cout << f(1, 2) << endl; // -1return 1; }
模板类型:
#include <iostream> #include <functional> using namespace std;class Math { public:template <class T>T Minus(T i, T j){return i - j;} };int main() {Math m;function<int(int, int)> f = bind(&Math::Minus<int>, &m, placeholders::_1, placeholders::_2);cout << f(1, 2) << endl; // -1return 1; }
转载于:https://www.cnblogs.com/heartchord/p/5017071.html
std::function相关推荐
- 函数指针amp;绑定: boost::functoin/std::function/bind
see link: https://isocpp.org/wiki/faq/pointers-to-members function vs template: http://stackoverflow ...
- C++ std::function<void(int)> 和 std::function<void()> 作为函数参数的注意事项
前言 std::function 作为标准库提供的函数指针,使用起来还是比较方便的,不过在使用过程中有一些需要注意的细节,这里做一个简单的记录. 基本使用 头文件: #include <func ...
- C++11中std::function的使用
类模版std::function是一种通用.多态的函数封装.std::function的实例可以对任何可以调用的目标实体进行存储.复制.和调用操作,这些目标实体包括普通函数.Lambda表达式.函数指 ...
- std::function简介
1. 简介 std::function是一个函数对象的包装器,std::function的实例可以存储,复制和调用任何可调用的目标,包括: 函数. lamada表达式. 绑定表达式或其他函数对象. 指 ...
- C++——包装器std::function与绑定器std::bind
C++--包装器std::function与绑定器std::bind 1.可调用对象的包装器 std::function是可调用对象的包装器.它是一个类模板,可以容纳除了类成员(函数)指针之外的所有可 ...
- C++11 std::bind std::function 高级用法
C++11 std::bind std::function 高级用法 (c++11的新特性) 原文:https://blog.csdn.net/yangjie6898862/article/detai ...
- C++中std::function和std::bind
1.可调用对象 可调用对象有一下几种定义: 是一个函数指针,参考 C++ 函数指针和函数类型: 是一个具有operator()成员函数的类的对象: 可被转换成函数指针的类对象: 一个类成员函数指针: ...
- callable object与新增的function相关 C++11中万能的可调用类型声明std::function...
在c++11中,一个callable object(可调用对象)可以是函数指针.lambda表达式.重载()的某类对象.bind包裹的某对象等等,有时需要统一管理一些这几类对象,新增的function ...
- C++ 11三个新特性的简单使用 - std::function、lambda 表达式、智能指针
使用Dev C++:先设置Dev C++ 支持 C++ 11:见此文后部: https://blog.csdn.net/bcbobo21cn/article/details/111466179 1 s ...
- C++11 std::function
@time 2019-07-07 @author Ruo_Xiao 1.头文件 #include <functional> 2.作用 类模版 std::function 是一种通用.多态的 ...
最新文章
- python中什么是字符举例说明_第20p,什么是字符串?Python中的str
- centos6.5 安装mysql8,centos6上安装mysql8.0版本
- 虚拟机网络设置方法——转载
- 蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载【2013年(第4届)~2021年(第12届)】
- python教程循环语句_Python教程:关于Python 循环语句
- ArcEngine开发之自定义工具
- 【推荐】 女人愁嫁时代终于来临
- python解释器的安装
- docker入门2---docker的初体验
- Sql Server数据库查询去重数据,并保留最新的数据,以及删除重复数据
- Quartus II13.1 simulate13.1 详细安装教学
- Qt自定义实现的日历控件
- 计算机win7如何连接wifi网络,win7台式电脑怎么连接wifi win7台式电脑如何设置wifi...
- Error: Unresolved node modules: vue
- 中国电信“公板”计划主攻中端市场
- Android Hal层回调APP应用接口
- 机遇与财富并存,一家网吧打造自己的客户数据库,后端疯狂盈利!
- 国画家刘艺青个人介绍
- 获取apk签名及apk签名方法
- 听说今天是七夕,那我们写一个网页开发来庆祝一下