C++ - std::bind 사용

지정한 함수를 wrap해서 std::function을 만든다.

#include <iostream>

void test_function(int a, int b) {
    printf("a=%d, b=%d\n", a, b);
}

int main(int argc, const char * argv[]) {
    auto func1 = std::bind(test_function, std::placeholders::_1, std::placeholders::_2);
    func1(1, 2);
    // -> a=1, b=2

    auto func2 = std::bind(test_function, std::placeholders::_1, 9);
    func2(1);
    // -> a=1, b=9

    return 0;
}

std::placeholders::_n 이라는 것이 헷갈리지만 이것은 만든 std::function을 호출할 때의 인수를 가리킨다.


#include <iostream>

class Test {
public:
    void test_function(int a, int b) {
        printf("a=%d, b=%d\n", a, b);
    }
};

int main(int argc, const char * argv[]) {
    auto test = Test();
    auto func1 = std::bind(&Test::test_function, test, std::placeholders::_1, std::placeholders::_2);
    func1(1, 2);

    return 0;
}


#include <iostream>

class Test {
public:
    void test_function(int a, int b) {
        printf("a=%d, b=%d\n", a, b);
    }

    void bind_test() {
        auto func1 = std::bind(&Test::test_function, this, std::placeholders::_1, std::placeholders::_2);
        func1(1, 2);
    }
};

int main(int argc, const char * argv[]) {

    auto test = Test();
    test.bind_test();

    return 0;
}

이 글은 2020-06-08에 작성되었습니다.