【C++11】function包装器,bind函数模板使用

博客主页: 主页
系列专栏: C++
❤️感谢大家点赞收藏⭐评论✍️
期待与大家一起进步!


文章目录

  • 前言
  • 一、function的原型
  • 二、function的使用
  • 三、bind
    • 1.绑定普通函数
    • 2.绑定类中的静态成员函数
    • 3.绑定类中的普通成员函数
    • 4.绑定带缺省参数的函数


前言

function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。

ret = func(x);
上面func可能是什么呢?那么func可能是函数名?
函数指针?函数对象(仿函数对象)?也有可能是lamber表达式对象?
所以这些都是可调用的类型!如此丰富的类型,可能会导致模板的效率低下!为什么呢?

【C++11】function包装器,bind函数模板使用_第1张图片
通过上面的程序验证,我们会发现useF函数模板实例化了三份。

而我们的function包装器能够很好的解决这个问题。

一、function的原型

std::function在头文件<functional>
// 类模板原型如下
template <class T> function;     // undefined
template <class Ret, class... Args>
class function<Ret(Args...)>;
模板参数说明:
Ret: 被调用函数的返回类型
Args…:被调用函数的形参

二、function的使用

【C++11】function包装器,bind函数模板使用_第2张图片

【C++11】function包装器,bind函数模板使用_第3张图片
这里我们对象里面的静态变量发生变化,说明我们使用的是同一个模板实例化出的对象,这个模板实例化出的对象,返回值为double,参数为double

三、bind

std::bind函数定义在头文件中,是一个函数模板,它就像一个函数包装器(适配器),接受一个可
调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。一般而
言,我们用它可以把一个原本接收N个参数的函数fn,通过绑定一些参数,返回一个接收M个(M
可以大于N,但这么做没什么意义)参数的新函数。同时,使用std::bind函数还可以实现参数顺
序调整等操作。

1.绑定普通函数

【C++11】function包装器,bind函数模板使用_第4张图片
【C++11】function包装器,bind函数模板使用_第5张图片

2.绑定类中的静态成员函数

class SubType
{
public:
	static int sub(int a, int b)
	{
		return a - b;
	}

	int ssub(int a, int b, int rate)
	{
		return (a - b) * rate;
	}
};

【C++11】function包装器,bind函数模板使用_第6张图片

3.绑定类中的普通成员函数

【C++11】function包装器,bind函数模板使用_第7张图片

4.绑定带缺省参数的函数

【C++11】function包装器,bind函数模板使用_第8张图片

你可能感兴趣的:(c++,javascript,开发语言)