函數對象、bind、function用法

#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>

namespace test{
class addTwoNums{
private:
    typedef std::function<void (int, int)> addTwo;
public:
    void addWhenInputTwoNums(addTwo& obj){
        int a, b;
        std::cin>>a>>b;
        obj(a, b);
        return ;
    }
};
class functorTest{
private:
    void addThree(int i, int j, int k){
        std::cout<<i+j+k<<std::endl;
        return ;
    }
public:
    bool operator()(const int i){
        std::cout<<"i="<<i<<std::endl;
        if(i==2){
            return true;
        }
        return false;
    }
    void realadd(){
        std::function<void(int, int)> f =
        std::bind(&functorTest::addThree, this, 3,
                  std::placeholders::_1,
                  std::placeholders::_2);
        adf.addWhenInputTwoNums(f); //use bind
        std::vector<int> v;
        v.push_back(1);
        v.push_back(2);
        v.push_back(3);
        std::find_if(v.begin(), v.end(), functorTest());//function object
        return ;
    }
private:
        addTwoNums adf;
};

int main(){
    functorTest ft;
    ft.realadd();
    return 0;
}
};

int main(){
    test::main();
    return 0;
}

輸出結果:ios

相關文章
相關標籤/搜索