function 은 함수를 일반 변수처럼 사용 가능하게 해준다.
#include "stdio.h" #include "iostream" #include "functional" using std::tr1::function; using std::type_info; void print_type(const type_info& info) { std::cout << info.name() << std::endl; } void main(void) { //_CRTIMP int __cdecl atoi(const char *) functionfunc_atoi(atoi); function func_empty; //함수 타입 출력
print_type(func_atoi.target_type()); print_type(func_empty.target_type()); //bool operator 이 정의 되어 있어서 바로 비교 가능하다. if(!func_atoi) std::cout << "func_atoi is null" << std::endl; if(!func_empty) std::cout << "func_empty is null" << std::endl; int num = func_atoi("12345"); std::cout << "Number is " << num << std::endl; func_empty.swap(func_atoi); // func_atoi.swap(func_empty); 도 같은 결과이다. if(!func_atoi) std::cout << "func_atoi is null" << std::endl; if(!func_empty) std::cout << "func_empty is null" << std::endl; }
출력결과:
int (__cdecl*)(char const *)
void
func_empty is null
Number is 12345
func_atoi is null
Press any key to continue
보너스로 bind() 간단한 예제
#include "iostream" using std::cout; using std::endl; #includeusing std::tr1::function; using std::tr1::bind; template void Func_call(FUNC func) { cout << func("1234") << endl; } void main() { function func(atoi); Func_call(func); Func_call(bind(atoi, _1)); }
'Library' 카테고리의 다른 글
오라클 ODBC 설정 하기 (3) | 2012.09.13 |
---|---|
google test, googlemock test 간략한 사용기 (0) | 2012.01.05 |
TR1 유용한 클래스/함수 (4-2) ... reference_wrapper 템플릿 (0) | 2010.11.09 |
TR1 유용한 클래스/함수 (4-1) ... mem_fn 템플릿 (0) | 2010.11.08 |
TR1 유용한 클래스/함수 (3) ... UnOrdered Associative Containers (0) | 2010.01.27 |