栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++新特性13

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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机制笔记

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529183.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号