C++新特性13

C++新特性13,第1张

C++新特性13

1. 函数对象包装器function
为了函数提供了一种容器(封装),存放在对象或者变量中。通俗一些的理解就是把函数当做对象来处理。
(1)支持4种函数的封装

	//1.普通函数
	//2.匿名函数
	//3.类成员函数
	//4.仿函数(重载了()运算符的函数)

普通函数的封装

#include 
#include 
#include 
#include 
using namespace std;

int test(int n) {
	cout << n << endl;
	return n;
}

//应用举例
int main()
{
	//函数对象包装器:
	//为了函数提供了一种容器(封装),存放在对象或者变量中
	test(1);
	
	//返回值;(int)参数列表;
	functionf = test;
	f(123);

	return 0;
}


匿名函数的封装
类成员函数的封装
仿函数(重载了()运算符的函数)的封装

#include 
#include 
#include 
#include 
using namespace std;

int test(int n) {
	cout << n << endl;
	return n;
}

class CTest {
public:
	CTest() {}
	int MyTest(int n) {
		cout << n << endl;
		return n;
	}
	//仿函数
	int operator()(int n) {
		cout << n << endl;
		return n;
	}

};

//应用举例
int main()
{
	//函数对象包装器:
	//为了函数提供了一种容器(封装),存放在对象或者变量中
	test(1);
	
	//支持4中函数的封装
	//1.普通函数
	//2.匿名函数
	//3.类成员函数
	//4.仿函数(重载了()运算符的函数)

	//普通函数的封装
	//返回值;(int)参数列表;
	functionf = test;
	//f(123);

	//匿名函数
	functionf2 = [](int n)->int {
		cout << n << endl;
		return n;
	};
	f2(123);

	//类的成员函数 CTest*指this指针
	functionf3 = &CTest::MyTest;
	CTest t;
	f3(&t,123);

	//仿函数的调用,t是对象,类似于函数的使用
	t(123);
	functionf4 = &CTest::operator();
	f4(&t,123);

	return 0;
}

2. bind机制
参数不想按顺序进行传递,类似默认参数,但可以打破顺序。

#include 
#include 
#include 
#include 
using namespace std;

//参数比较多
void add(int a,int b,int c) {
	cout << a << b << c << endl;
}

int main()
{
	//bind机制:参数不想按顺序进行传递,类似默认参数,但可以打破顺序
	//函数与参数绑定在一起,变成新的对象
	auto a=bind(add,1,2,3);
	a(); //输出123

	//第二个参数在实际的运行再给值,placeholders::_1 占位符,_1表示第一个参数
	auto foo2 = bind(add, 1, placeholders::_1, 3);
	foo2(3); //输出133

	//第二个参数在实际的运行再给值,placeholders::_1 占位符,_1表示第一个参数 _1表示第二个参数
	auto foo3 = bind(add, placeholders::_2, placeholders::_1, 3);
	//1对应placeholders::_1,2对应placeholders::_2
	foo3(1,2); //输出213

	return 0;
}

3. 视频学习地址:函数对象包装器function与bind机制
4. 学习笔记:函数对象包装器function与bind机制笔记

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5520992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存