#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 이런식으로 써주셔야 됨니다..
'C..C++....' 카테고리의 다른 글
error LNK 2005 xxxx이(가) MSVCRT(D).lib 혹은 LIBCMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법 (2) | 2011.06.13 |
---|---|
gtest,unittest++ (0) | 2011.05.19 |
tr1 Random 사용하기 (0) | 2011.05.12 |
msado15.dll를 이용한 oledb사용시 CreateInstance(__uuidof(Connection)) 실패할때.. (1) | 2011.04.19 |
error LNK2001: _IID_IWICImagingFactory 외부 기호를 확인할 수 없습니다. (1) | 2011.04.11 |