[C++] 바인드(bind)
1. bind
- N 항 함수의 특정 인자를 고정한 새로운 함수 생성
2. 코드로 알아보기
- web_compiler 에서 확인
#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 😄.
댓글남기기