서문:

boost::asio의 예제 중 chat_server.hpp 를 보다가 이 글을 작성한다.
(chat_room class 를 참조 바란다.)


Features:

. 이미 정의된 함수에서 인수의 위치를 고정, 치환 할 수 있다.
. 코드의 양을 줄여준다.
. for_each, boost::ref, boost::cref 등과 함께 쓰인다.
. boost::bind는 <algorithm>에 있는 bind1st, bind2nd의 확장판이다.
. 일반함수 뿐만 아니라 멤버함수도 사용할 수 있다. 내부적으로 mem_fun을 사용한다.


예제1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <boost/bind.hpp>
#include <iostream>


int f(int a, int b)
{
	int c = a + b;
	std::cout << c << endl;
	return c;
}

int main()
{
	int a1 = 10, a2 = 20;
	boost::bind(f, _1, _2)(a1, a2);					// f(a1, a2)
	boost::bind(f, 10, _2)(a1, a2);					// f(10, a2)
	boost::bind(f, _1, 20)(a1, a2);					// f(a1, 20)
	boost::bind(f, _2, _1)(a1, a2);					// f(a2, a1)
	return 0;
}


Output:
1
2
3
4
30
30
30
30


참고자료:

http://www.boost.org/doc/libs/1_47_0/libs/bind/bind.html

+ Recent posts