概述
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,可调用类对象。
参考文献
C++ std::function技术浅谈_xdesk的博客-CSDN博客
C++ std::function介绍和使用_jinzhu1911的博客-CSDN博客
http://www.cplusplus.com/reference/functional/function/
最后
以上就是瘦瘦微笑为你收集整理的std::function简介1. 简介2. 基本使用参考文献的全部内容,希望文章能够帮你解决std::function简介1. 简介2. 基本使用参考文献所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复