#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 |