C++11의functionbind 리셋 메커니즘

2074 단어
#include
using namespace std::placeholders;
1. 함수 유형:function<반환값(매개 변수 목록)> 함수 이름을 미리 설명할 수 있습니다.
              function< int (int, double, string) > fn
성명 형식 없이 바로 bind 앞: auto fn = bind (...)
함수 매개변수에 대한 대응:
선언된 위치에 실제 함수의 매개변수를 사용합니다.
            int test(double, string, int)
fn = bind(test,_2,_3,_1) -->test 매개 변수의 첫 번째 유형 double,function의_2 위치,
상수 매개 변수를 설정할 수도 있습니다. fn =bind(test, 3.5, "hello", 6);
2. bind 클래스의 구성원 함수:
          bind(&A::print, &a, ...)
#include <iostream>
#include <string>
#include <functional>
using namespace std;
using namespace std::placeholders;

void test(int i, double d, const string &s)
{
    cout << "i= " << i << " d= " << d <<" s= " << s << endl;
}
int test1(int i, double d, const string &s)
{
    cout << "i= " << i << " d= " << d <<" s= " << s << endl;
    return i;
}

int main(int argc, const char *argv[])
{
    function<void( void )> fp;
    string s = "foo";
    int a = 3;
    double b = 6.7;
    fp = bind(&test, a, b, s);
    fp();

    function <void (int , const string&)> fp1;
    double b2 = 4.6;
    fp1 = bind(test, _1, b2, _2);
    fp1(4, "kity");

    function <int (int , const string&) > fp2;
    fp2 = bind<int>(test1, _1, b2, _2);
    int  y = fp2(4, "kity");
    cout << y << endl;

    auto fn = bind(test, 10, 23.3, "heko");// function ,
    fn();

    auto ff = bind(test, _1, _3, _2);//bind i test _j 
    ff(12, "ppp", 12.5);

    class A
    {
        public:
            void print(int a, double x)
            {
                cout << a << " " << x << endl;
            }
    };
    A a3;
    auto fclass= bind(&A::print, &a3, 11, 7.7);
    fclass();
    return 0;
}

좋은 웹페이지 즐겨찾기