std::function 是一个模板类,用于封装各种类似于函数这样的对象,例如普通函数,仿函数,匿名函数等等。其强大的多态能力,让其使用只依赖于调用特征。在程序的升级中,可以实现一个调用表,以兼容新旧不同的实现方式。
例如:
1 #include <iostream> 2 #include <functional> 3 #include <list> 4 5 using namespace std; 6 7 //普通函数 8 int c_fun_add(int a, int b) 9 { 10 return a + b; 11 } 12 13 //模板函数 14 template <typename T> 15 T t_fun_add(T a, T b) 16 { 17 return a + b; 18 } 19 20 //仿函数 21 class functor_add 22 { 23 public: 24 int operator()(int a, int b) 25 { 26 return a + b; 27 } 28 }; 29 30 //匿名函数,lambda表达式 31 auto l_fun_add = [](int a, int b) 32 { 33 return a + b; 34 }; 35 36 //成员函数 37 class FunClass 38 { 39 public: 40 static int s_fun_add(int a, int b) 41 { 42 return a + b; 43 } 44 45 int n_fun_add(int a, int b) 46 { 47 return a + b; 48 } 49 }; 50 51 int _tmain(int argc, _TCHAR* argv[]) 52 { 53 functor_add functor; 54 FunClass funcls; 55 std::list<std::function<int(int, int)>> call_tables; 56 call_tables.push_back(c_fun_add); 57 call_tables.push_back(t_fun_add<int>); 58 call_tables.push_back(functor); 59 call_tables.push_back(l_fun_add); 60 call_tables.push_back(funcls.s_fun_add); 61 call_tables.push_back(bind(&FunClass::n_fun_add, &funcls, placeholders::_1, placeholders::_2)); 62 63 for (const auto& fun : call_tables) 64 { 65 cout << fun(1, 8) << endl; 66 } 67 getchar(); 68 return 0; 69 }