博客主页: 主页
系列专栏: C++
❤️感谢大家点赞收藏⭐评论✍️
期待与大家一起进步!
function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。
ret = func(x);
上面func可能是什么呢?那么func可能是函数名?
函数指针?函数对象(仿函数对象)?也有可能是lamber表达式对象?
所以这些都是可调用的类型!如此丰富的类型,可能会导致模板的效率低下!为什么呢?
通过上面的程序验证,我们会发现useF函数模板实例化了三份。
而我们的function包装器能够很好的解决这个问题。
std::function在头文件<functional>
// 类模板原型如下
template <class T> function; // undefined
template <class Ret, class... Args>
class function<Ret(Args...)>;
模板参数说明:
Ret: 被调用函数的返回类型
Args…:被调用函数的形参
这里我们对象里面的静态变量发生变化,说明我们使用的是同一个模板实例化出的对象,这个模板实例化出的对象,返回值为double,参数为double
std::bind函数定义在头文件中,是一个函数模板,它就像一个函数包装器(适配器),接受一个可
调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。一般而
言,我们用它可以把一个原本接收N个参数的函数fn,通过绑定一些参数,返回一个接收M个(M
可以大于N,但这么做没什么意义)参数的新函数。同时,使用std::bind函数还可以实现参数顺
序调整等操作。
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;
}
};