std::function简介
1. 简介
std::function
是一个函数对象的包装器,std::function
的实例可以存储,复制和调用任何可调用的目标,包括:
- 函数。
- lamada表达式。
- 绑定表达式或其他函数对象。
- 指向成员函数和指向数据成员的指针。
所存储的可调用对象被称为目标的std::function。如果一个std::function实例不包含目标,则将其称为空。调用空的std::function对象会导致抛出异常std::bad_function_call。
std::function满足CopyConstructible和CopyAssignable的要求。
当std::function
对象没有初始化任何实际的可调用元素,调用std::function
对象将抛出std::bad_function_call
异常。
2.1. Member types
成员类型 | 说明 |
---|---|
result_type
|
返回类型 |
argument_type
|
如果函数对象只有一个参数,那么这个代表参数类型。 |
first_argument_type
|
如果函数对象有两个个参数,那么这个代表第一个参数类型。 |
second_argument_type
|
如果函数对象有两个个参数,那么这个代表第二个参数类型。 |
2.2. Member functions
成员函数声明 | 说明 |
---|---|
constructor
|
构造函数:constructs a new std::function instance |
destructor
|
析构函数: destroys a std::function instance |
operator=
|
给定义的function对象赋值 |
operator bool
|
检查定义的function对象是否包含一个有效的对象 |
operator()
|
调用一个对象 |
2. 基本使用
#include <iostream>
#include <functional>int fun(int a, int b, int c, int d) {std::cout << a << std::endl;std::cout << b << std::endl;std::cout << c << std::endl;std::cout << d << std::endl;return 0;
}class CCaller {
public:int operator()(int a, int b, int c, int d) {std::cout << a << std::endl;std::cout << b << std::endl;std::cout << c << std::endl;std::cout << d << std::endl;return 0;
}
};int main() {CCaller Caller;std::function<int(int, int, int, int)> f;f = [](int a, int b, int c, int d) -> int{std::cout << a << std::endl;std::cout << b << std::endl;std::cout << c << std::endl;std::cout << d << std::endl;return 0;};f(1, 2, 3, 4);f = Caller;f(10, 20, 30, 40);f = fun;f(100, 200, 300, 400);return 0;
}
从上面我们可以发现,std::function
可以表示函数,lamada,可调用类对象。
参考文献
- https://blog.csdn.net/xiangbaohui/article/details/106741654
- https://blog.csdn.net/jinzhu1911/article/details/101307637?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control
- http://www.cplusplus.com/reference/functional/function/
std::function简介相关推荐
- 函数指针与 std::function 简介
在c/c++实际编程中,使用函数指针/function对象有时候可以让我们的代码更加简洁条理,尤其存在对同一对象多种不同的处理方案时,使用函数指针/function对象结合std::map等数据结 ...
- std::function用法详解
std::function用法详解 代码在:VCCommon/functionDemo std::function 简介 类模板 std :: function 是一个通用的多态函数包装器. std ...
- 函数指针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表达式.函数指 ...
- 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 ...
最新文章
- 《预训练周刊》第25期:HyperCLOVA:数十亿级韩语生成式预训练变换器、GPT-3在生物医学领域不是好的小样本学习器...
- vs编译idl文件_Unity中 .asmdef文件的作用
- Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
- SpringCloud的GateWay网关中怎么debug得到真实的路由地址
- 触动精灵mysql用法_[触动精灵]触动精灵官方手册流水账2
- 【leetcode】复写零
- TFS -- 使用手记 (更新2009/12/3)
- 08-05-09pe_xscan 增加IE版本检测
- chrome强烈推荐安装Octotree插件
- apicloud访问php,支付宝 app应用 受权 php + APICloud
- 我的世界服务器皮肤修改,万用皮肤补丁CustomSkinLoader
- 系统管理、系统安全命令
- 一个女孩写给女孩的话
- 金弘同创教育是真的:拼多多店铺如何可以做好
- SAP全球副总裁、中国区总经理李强,离职去向大家就不要猜了
- 树莓派与Arduino串口通讯获取DH11温湿度
- 最不常用置换算法LFT 最久未使用置换算法LRU 操作系统 C语言链表实现
- python模型转PMML
- HTML5源码-实现一个简单的个人主页
- 双色球号码自动生成系统-------买彩票不愁啦