Library2010. 11. 23. 19:22

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 *)
   function func_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;

#include 

using 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));
}
Posted by 상현달