본문 바로가기

프로그램언어/boost

[ Boost ] Boost::bind #1

Boost 목록
 

링크 : http://tingcobell.tistory.com/295


boost에서 관심있게 보고 있는 분야 이기도 합니다. 처음에는 bind을 생각했을 때, 아 socket에서 쓰는 bind 함수

인가 보구나 하고 나중에 봐야지 했었습니다.

먼저 boost::bind을 사용하는 목적은 container의 객체들을 사용하고 싶을 때, 함수 객체를 만들어주기 위해서 

사용이 됩니다. bind는 임의의 함수, 함수 포인터, 함수 객체, 멤버 함수를 함수 객체로 만들수 있기 때문에, 

원하는 값을 전달 시킬 수 있습니다.

링크 : http://www.boost.org 

역시 문서가 너무나도 잘되어 있습니다. boost::bind 는 std::bind1st와 std::bin2nd 보다 일반화 한 내용입니다. 

#include <boost/bind.hpp>

//#include <boost/signal.hpp>

#include <iostream>


int f(int, int);


struct X

{

int f(int);

}


int main()

{

//boost::bind(f, 1);    // error, f takes two arguments

boost::bind(f, 1, 2); // OK


//boost::bind(&X::f, 1);     // error, X::f takes two arguments

boost::bind(&X::f, _1, 1); // OK

}


int f( int a, int b)

{

return a + b;

}




#include <boost/bind.hpp>

#include <iostream>



int f(int a)

{

return a;

}


int main()

{

boost::bind(f, "incompatible");      // OK so far, no call

//boost::bind(f, "incompatible")();    // error, "incompatible" is not an int

boost::bind(f, _1);                  // OK

//boost::bind(f, _1)("incompatible");  // error, "incompatible" is not an int

}



#include <boost/bind.hpp>

#include <iostream>



int f(int a)

{

return a;

}


int main()

{

boost::bind(f, _1);                  // OK

//boost::bind(f, _1)();                // error, there is no argument number 1

int c = boost::bind(f, _1)( 1);    // 성공

}



#include <boost/bind.hpp>

#include <iostream>

#include <boost/detail/lightweight_test.hpp>


struct X

{

short operator()(short &r) const { return ++r; }

};


int main()

{

short i(6);

BOOST_TEST( boost::bind<short>( X(), boost::ref(i))() == 7 );


std::cout << i << std::endl;

return 0;

}


공부를 하면 할 수록 너무나도 매력적인 라이브러리라는 것을 알 수 있습니다. 점점 더 빠져들게 됩니다. 

'프로그램언어 > boost' 카테고리의 다른 글

[ Boost ] boost::asio Part1.  (0) 2011.05.13
[ Boost ] boost::bind Part2  (0) 2011.05.12
[ Boost ] Boost::thread #4  (0) 2011.05.12
[ Boost ] Boost::thread #3  (1) 2011.05.11
[ Boost ] Boost::thread #2  (0) 2011.05.11