c++ std::function std::bind 函数对象

2017-03-14  本文已影响186人  HenryTien

std::function and std::bind were born inside the Boost C++ Library, but they were incorporated into the new C++11 standard.

#include <functional>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void excute(const vector<function<void ()>>& fs)
{
    for(auto&f:fs){
        f();
    }
}
void plain_old_func(){
    cout<<"I'am old plain"<<endl;
}
class functor{
    public:
        void operator()() {
            cout<<"I'am a functor"<<endl;
        }
};

int main()
{
    vector<function<void()>> x;
    x.push_back(plain_old_func);
    functor instance;
    x.push_back(instance);
    x.push_back([](){
            cout<<"HI,I am lamda expression"<<endl;
            });
    excute(x);
    return 0;
}

std::function and std::bind were born inside the Boost C++ Library, but they were incorporated into the new C++11 standard.

#include <functional>
#include <iostream>
using namespace std;
using namespace std::placeholders;
int mutiply(int a,int b){
    return a*b;
}

int main()
{
    auto f=bind(mutiply,5,_1);
    for(int i=0;i<10;i++){
        cout<<"5*"<<i<<"="<<f(i)<<endl;
    }
    return 0;
}

output:
50=0
5
1=5
52=10
5
3=15
54=20
5
5=25
56=30
5
7=35
58=40
5
9=45

#include <functional>
#include <iostream>
using namespace std;
using namespace std::placeholders;
void show(const string& a,const string&b,const string&c){
    cout<<a<<":"<<b<<":"<<c<<";"<<endl;
}
int main()
{
    auto x=bind(show,_1,_2,_3);
    auto y=bind(show,_2,_3,_1);
    auto z=bind(show,"hello",_2,_1);

    x("one","two","three");
    y("one","two","three");
    z("one","two");
    return 0;
}

one:two:three;
two:three:one;
hello:two:one;

std::function and std::bind: what are they & when they should be used?

xx

上一篇下一篇

猜你喜欢

热点阅读