1.为什么要有function
在下面的场景下 useF类模版要实例化出三份,影响效率
仿函数:c++仿函数--通俗易懂-CSDN博客
lambda表达式:c++ lambda表达式--通俗易懂-CSDN博客
template<class F, class T>
T useF(F f, T x)
{
static int count = 0;
cout << "count:" << ++count << endl;
cout << "count:" << &count << endl;
return f(x);
}
//普通函数
int f1(int i)
{
return i * 2;
}
//仿函数
class f2
{
public:
int operator()(int i)
{
return i * 2;
}
};
int main()
{ // 函数名
cout << useF(f1, 1) << endl;
// 仿函数
cout << useF(f2(), 2) << endl;
// lamber表达式
auto f3 = [](int i)->int { return i * 2; };
cout << useF(f3, 3) << endl;
return 0;
}
而用function包装器能很好的解决这个问题
2.function是什么
c++中的function本质上是一个类模版
模板参数说明:
Ret: 被调用函数的返回类型
Args…:被调用函数的形参
3.function怎么使用
使用function之前需要包头文件<functional>
int main()
{ // 函数名
function<int(int)> func1 = f;
cout << useF(func1, 1) << endl;
// 仿函数
function<int(int)> func2 = Functor();
cout << useF(func2, 2) << endl;
// lamber表达式
function<int(int)> func3 = [](int i)->int { return i *2; };
cout << useF(func3, 3) << endl;
return 0;
}