C++ Technical Report 1 : Function pobjects
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'