(C++ STL) bind

Posted by : at

Category : Cpp


#include <iostream>
#include <functional>
using namespace std;
using namespace std::placeholders;

void f1(int a, int b, int c) { printf("f1 : %d, %d, %d\n", a,b,c); }
void f2(int& a) { a = 20; }

int main()
{
    bind(&f1, 1, 2, 3)();       // f1(1,2,3)으로 고정된다.
    bind(&f1, 1, 2, _1)(10);    // f1(1,2,10)으로 고정된다.
    bind(&f1, 1, _2, _1)(10, 20);// f1(1,20,10)으로 고정된다.
}
int n = 0;
bind(&f2, n)();     // f2(n)

cout << n << endl;  // 20? or 0? -> 0이 나온다.

reference_wrapper<int> r(n);    // 20이 나온다.

bind(&f2, ref(n))();  // reference_wrapper를 매번치기 힘드니.
#include <iostream>
#include <functional>
using namespace std;
using namespace std::placeholders;

class Test
{
public:
    int data = 0;
    void f(int a, int b)    // == void f(Test* this, int a, int b)
    {
        data = a;
        printf("f : %d, %d\n", a, b);
    }
};

int main()
{
    Test t;
    bind(&Test::f, &t, 1, 2)(); // t.f(1,2)
    // bind(&Test::f, ref(t), 1, 2)(); // 동일표현

    bind(&Test:data, &t)() = 10;    // t.data = 10

    cout << t.data << endl;
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links