#include <iostream> #include <functional> #include <vector> using namespace std; // c type global function int c_func(int a, int b) { return a + b; } //function object class functor { public: int operator() (int a, int b) { return a + b; } }; int main() { //old use way typedef int (*F)(int, int); F f = c_func; cout<<f(1,2)<<endl; functor ft; cout<<ft(1,2)<<endl; ///////////////////////////////////////////// std::function< int (int, int) > myfunc; myfunc = c_func; cout<<myfunc(3,4)<<endl; myfunc = ft; cout<<myfunc(3,4)<<endl; //lambda myfunc = [](int a, int b) { return a + b;}; cout<<myfunc(3, 4)<<endl; ////////////////////////////////////////////// std::vector<std::function<int (int, int)> > v; v.push_back(c_func); v.push_back(ft); v.push_back([](int a, int b) { return a + b;}); for (const auto& e : v) { cout<<e(10, 10)<<endl; } return 0; }
C++中,可調用實體主要包括函數,函數指針,函數引用,能夠隱式轉換爲函數指定的對象,或者實現了opetator()的對象(即C++98中的functor)。C++11中,新增長了一個std::function對象,std::function對象是對C++中現有的可調用實體的一種類型安全的包裹(咱們知道像函數指針這類可調用實體,是類型不安全的).ios