1 분 소요

1. bind

  • N 항 함수의 특정 인자를 고정한 새로운 함수 생성

2. 코드로 알아보기

#include <iostream> 
#include <functional>    // bind 
using namespace std::placeholders; // _1, _2, _3 ... 
  
void foo(int a, int b, int c, int d) 
{ 
    printf("%d, %d, %d, %d\n", a, b, c, d); 
} 
int main() 
{ 
  foo(1, 2, 3, 4); // 4항 함수 

  // 4항 -> 단항 함수 
  bind(&foo, 5, 3, _1, 2)(7); // 5 3 7 2 

  bind(&foo, 5, _2, 6, _1)(3, 8); // 5, 8, 6, 3
}
#include <iostream> 
#include <functional> 
using namespace std::placeholders; 
using namespace std; 
void foo(int a, int b, int c, int d) 
{ 
    printf("%d, %d, %d, %d\n", a, b, c, d); 
} 
  
void goo(int a) { printf("%d\n", a); } 
int main() 
{ 
  // 일반 함수 포인터 
  void(*f1)(int);  

  // C++11 에서 제공하는 함수 포인터의 일반화 버전 
  std::function<void(int)> f; 

  f = &goo; 
  f(10); 

  // fucntion은 bind와 같이 사용하면 다양한 함수를 담을 수 있음
  f = std::bind(&foo, 1, 2, 3, _1); 
  f(10); // foo(1, 2, 3, 10) 
}
#include <iostream> 
#include <functional> 
using namespace std::placeholders; 
using namespace std; 
void foo(int a, int& b) { b = 100; } 
  
int main() 
{ 
  function<void(int)> f; 

  int n = 0; 
  // 변수 n이 brace 이후 사라지는데 f는 다른데서 쓸수도 있기 때문에 값으로 고정
  // f = bind(&foo, _1, n);

  f = bind(&foo, _1, ref(n)); // n을 참조로 고정 

  f(0); // foo(0, n) 

  cout << n << endl; // 100 
}

참고

codenuri 강석민 강사 강의 내용기반으로 정리한 내용입니다.
코드누리


This is personal diary for study documents.
Please comment if I'm wrong or missing something else 😄. 

Top

태그: , ,

카테고리:

업데이트:

댓글남기기