C++ 프로그래밍

C++ Technical Report 1 : Function pobjects

하늘흐늘 2009. 7. 28. 12:21
반응형


Polymorphic Function Wrappers (tr1::function)
모든 Callables(함수포인터, 멤버함수 포인터 그리고 함수객체(Functor or Function Objects))에 대하여 단일한 wrapper를 제공합니다.
※ Callables라는 좋은 표현을 한국말로 어떻게 해야할지 모르겠군요...

Function Object Binders (tr1::bind)
std::bind1st 및 std::bind2nd의 일반화된 버전으로 함수 호출시 파라메터를 유연하게 지정하게 해줍니다.

tr1::function의 최대 장점은 C시절의 함수포인터, C++의 멤버함수 포인터, STL과 같이 각광 받기 시장한 함수 객체를 단일 템플릿으로 처리하여 준다는데 있는 듯 합니다. 자세한 코드 설명은 Visual C++ 2008 Feature Pack을 사용하여 Windows 응용 프로그램에 새로운 기능 추가라는 글 중간에 있는 다형 함수 개체부분을 보시면 됩니다. TR1 함수 객체들에 대하여 워낙 설명을 잘해놓은 글이라 꼭 볼 것을 추천합니다. 물론 함수 객체 정도의 C++ 상식은 있어야 겠죠?


Function Return Types (tr1::result_of)
Callables의 리턴타입을 리턴하는 템플릿입니다. MSDN에서 가져온 아래 예제를 보시면 쉽게 이해하실 듯 합니다.

// std_tr1__functional__result_of.cpp 
// compile with: /EHsc 
#include <functional> 
#include <iostream> 
 
double square(double x) 
{ 
  return (x * x); 
} 
 
template<class Fun, class Arg> 
void test_result(const Fun& fun, Arg arg) 
{ 
  typename std::tr1::result_of<Fun(Arg)>::type val = fun(arg); 
  std::cout << "val == " << val << std::endl; 
} 
 
int main() 
{ 
  test_result(&square, 3.0); 
 
  return (0); 
} 


Function Return Types (tr1::mem_fn)

std::mem_fun 및 std::mem_fun_ref의 확장형으로 멤버함수를 함수객체처럼 쓸 수 있게 만들어 줍니다. 특별히 알아야 할 멤버라기 보다는 필요할 때 찾아쓰면 되는 객체라고 생각됩니다.


참조자료

msdn 'result_of Class' boost 'TR1 By Subject'

 

반응형