1 #include <iostream> 2 #include <list> 3 using namespace std; 4 5 //函数包装器,左边参数右边函数 6 template<class T, class F> 7 T run(T t, F f) 8 { 9 return f(t); 10 } 11 12 //先获取类型再执行操作 13 template<class T> 14 T runit(T t) 15 { 16 //获取伪函数类型 17 Tfun<decltype(t)> f; 18 return f(t); 19 } 20 21 //创建伪函数 22 template <class T> 23 class fun 24 { 25 public: 26 T operator () (T data) 27 { 28 return data - 10; 29 } 30 }; 31 32 //创建伪函数 33 template<class T> 34 class Tfun 35 { 36 public: 37 T operator () (T data) 38 { 39 for (auto i : data) 40 { 41 cout << i << endl; 42 } 43 return data; 44 } 45 }; 46 47 void main() 48 { 49 //fun()匿名对象 50 /*fun<double> x; 51 cout << run(10.5, fun<double>()) << endl;*/ 52 //cout << run(10.5, x) << endl; 53 54 list<int> myint; 55 for (int i = 0; i < 5; i++) 56 { 57 myint.push_back(i); 58 } 59 //lambda函数包装器 60 /*run(myint,[](list<int> myint)->list<int> 61 { 62 for (auto i : myint) 63 { 64 cout << i << endl; 65 } 66 return myint; 67 });*/ 68 69 //类包装器 70 //run(myint, Tfun<list<int>>()); 71 72 runit(myint); 73 cin.get(); 74 }