Boost.Bind
프로그래밍 언어/boost2015. 4. 30. 22:53
boost::bind
std::bind1st, std::bind2d를 일반화시킨 버전
임의의 함수, 함수 포인터, 함수 객체, 멤버 함수를 함수 객체로 만들 수 있다
원하는 위치에 원하는 값을 (바인딩)전달 시킬 수 있는 함수 객체를 만들어 준다.
기본 boost::bind 사용법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include "stdafx.h" #include <boost/bind.hpp> #include <boost/ref.hpp> int add(int a, int b) { return a + b; } void func(int a, int b) { cout << (a + b) << endl; } void func(int a, int b, std::ostream& os) { os << a + b << endl; } int _tmain(int argc, _TCHAR* argv[]) { int x = 10; int y = 20; // func(5, 10); boost::bind(func, 5, 10)(); // func(10, 20); boost::bind(func, _1, _2)(10, 20); // func(y, x); boost::bind(func, _2, _1)(x, y); // func(y, x, std::cout); boost::bind(func, _1, _2, boost::ref(std::cout))(y, x); // add(5, y); cout << boost::bind(add, _1, _2)(5, y) << endl; return 0; } |
함수 객체 boost::bind 사용법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include "stdafx.h" #include <boost/bind.hpp> #include <boost/ref.hpp> class test { public: void operator()(int a, int b, std::ostream &os) { os << a + b << endl; } int operator()(int a, int b) { return a - b; } }; #include <vector> #include <algorithm> bool compare(int i, int j) { return i < j; } int _tmain(int argc, _TCHAR* argv[]) { // 함수 객체 생성 test testObj; int x = 10; int y = 20; // void operator()(int a, int b, std::ostream &os) boost::bind<void>(boost::ref(testObj), _1, _2, boost::ref(std::cout))(x, y); // int operator()(int a, int b) int z = boost::bind(boost::type<int>(), boost::ref(testObj), _2, _1)(x, y); cout << z << endl; return 0; } |
boost::bind를 활용한 컨테이너 std::sort 활용법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include "stdafx.h" #include <boost/bind.hpp> #include <vector> #include <algorithm> bool compare(int i, int j) { // 오름차순 정렬 return i < j; } int _tmain(int argc, _TCHAR* argv[]) { // 벡터 (정렬되지 않은 데이터 입력) vector<int> v{ 1, 3, 2, 4, 6, 5 }; // bind를 활용한 sort sort(v.begin(), v.end(), boost::bind(compare, _1, _2)); // 출력 확인 for (int i : v) cout << i << endl; return 0; } |
'프로그래밍 언어 > boost' 카테고리의 다른 글
Boost.Tuple & std::pair (0) | 2015.05.03 |
---|---|
Boost.Function (0) | 2015.05.01 |
Boost.Ref (0) | 2015.04.30 |
Boost.Atomic (0) | 2015.04.30 |
Boost.ScopeExit (0) | 2015.04.28 |