1.类型安全
2.std::function
std::function的实例可以对任何能够调用的目标实体进行封装调用,这些目标实体包括普通函数、lambda
表达式、函数指针、仿函数、类的普通成员函数和类的静态成员函数等。std::function对象是对C++中现
有的可调用实体的一种类型安全的封装(我们知道像函数指针这类可调用实体是类型不安全的),示例代
码如下:
#include <functional>
#include <iostream>
using namespace std;
std::function<int(int)> func;
// 普通函数
int testFunc(int a)
{
return a;
}
// lambda表达式
auto lambda = [](int a)->int{ return a; };
// 仿函数(实现operator()的函数)
class Functor
{
public:
int operator()(int a)
{
return a;
}
};
// 类的普通成员函数和静态成员函数
class TestClass
{
public:
int ClassMember(int a) { return a; }
static int StaticMember(int a) { return a; }
};
int main()
{
// 普通函数
func = testFunc;
int result = func(10);
cout << "普通函数:"<< result << endl;
// lambda表达式
func = lambda;
result = func(20);
cout << "lambda表达式:"<< result << endl;
// 仿函数
Functor testFunctor;
func = testFunctor;
result = func(30);
cout << "仿函数:"<< result << endl;
// 类的普通成员函数
TestClass testObj;
func = std::bind(&TestClass::ClassMember, &testObj, std::placeholders::_1);
result = func(40);
cout << "类的普通成员函数:"<< result << endl;
// 类的静态成员函数
func = TestClass::StaticMember;
result = func(50);
cout << "类的静态成员函数:"<< result << endl;
return 0;
}