std::function 是一个模板类,用于封装各种类似于函数这样的对象,例如普通函数,仿函数,匿名函数等等。其强大的多态能力,让其使用只依赖于调用特征。在程序的升级中,可以实现一个调用表,以兼容新旧不同的实现方式。
例如:
#include <iostream>
#include <functional>
#include <list> using namespace std; //普通函数
int c_fun_add(int a, int b)
{
return a + b;
} //模板函数
template <typename T>
T t_fun_add(T a, T b)
{
return a + b;
} //仿函数
class functor_add
{
public:
int operator()(int a, int b)
{
return a + b;
}
}; //匿名函数,lambda表达式
auto l_fun_add = [](int a, int b)
{
return a + b;
}; //成员函数
class FunClass
{
public:
static int s_fun_add(int a, int b)
{
return a + b;
} int n_fun_add(int a, int b)
{
return a + b;
}
}; int _tmain(int argc, _TCHAR* argv[])
{
functor_add functor;
FunClass funcls;
std::list<std::function<int(int, int)>> call_tables;
call_tables.push_back(c_fun_add);
call_tables.push_back(t_fun_add<int>);
call_tables.push_back(functor);
call_tables.push_back(l_fun_add);
call_tables.push_back(funcls.s_fun_add);
call_tables.push_back(bind(&FunClass::n_fun_add, &funcls, placeholders::_1, placeholders::_2)); for (const auto& fun : call_tables)
{
cout << fun(, ) << endl;
}
getchar();
return ;
}