C..C++....
std::tr1::bind / function 사용방법
ICARTSH
2011. 5. 18. 14:22
#include <functional> #include <iostream> using namespace std; using namespace std::tr1::placeholders; // tr1::bind에서 _1을 쓰기위한 namespace class Test { public: typedef int result_type; // operator()을 위해서 꼭 써줘야 된다! public: int operator() (int k) const { cout << "Result : "<< k <<endl; return 1; } int Message(int k) { cout << "Result : " << k <<endl; return 1; } }; int MessageTest(int k) { cout << "Result : " << k << endl; return 1; } int _tmain(int argc, _TCHAR* argv[]) { std::tr1::function<int(int)> fun; //반환값 int형 매개변수 int을 받아들이는 함수 포인터를 생성. Test t; fun = std::tr1::bind(t,_1); // fun에 바인드시킨다 operator()부분 실행. _1은 매개변수 fun(10); //Result = 10; fun = std::tr1::bind(t,3); // _1이 아닌 3을 넣으면 아래부분 10을 무시하고 3으로만 뿌려준다 fun(10); //Result = 3; fun = std::tr1::bind(&Test::Message,t,_1); //Operator()이 아닌 맴버 함수 실행해줄때.. fun(10); //Result = 10; fun = std::tr1::bind(&MessageTest,_1); // 비 맴버 함수 fun(10); //Result = 10; return 0; }추가내용..
typedef int result_type;는 bind 시킬함수의 반환값을 정의하는 부분입니다.
위의 내용에서는 반환값이 int형이기 때문에 reault_type을 int로 정의했고
리턴값이 void형일때도 typedef void result_type 이런식으로 써주셔야 됨니다..