http://jacking75.cafe24.com/Boost/bind/mem_fn_Sample.html
출처 : http://www.kmonos.net/alang/boost/classes/mem_fn.html
boost::mem_fn
abstract
필요한 헤더
할 수 있는 것
멤버 함수를 보통 함수 같게 고치는
레퍼런스
sample
#include <boost/mem_fn.hpp>
using namespace std;
struct SomeObject{
public:
SomeObject( const char* i_name ) : name( i_name ) {}
void Print() { cout << name << endl; }
private:
const char* name;
};
int main(){
vector<SomeObject> v;
v.push_back(SomeObject("Taro"));
v.push_back(SomeObject("Jiro"));
v.push_back(SomeObject("Saburo"));
v.push_back(SomeObject("Shiro"));
v.push_back(SomeObject("Goro"));
// std::mem_fun_ref 의 대신
for_each( v.begin(), v.end(), boost::mem_fn(&SomeObject::Print) );
cout << "--------------" << endl;
vector<SomeObject*> vp;
vp.push_back(new SomeObject("Rokuro"));
vp.push_back(new SomeObject("Shichiro"));
vp.push_back(new SomeObject("Hachiro"));
vp.push_back(new SomeObject("Kuro"));
// 완전히 같은 형태로
// std::mem_fun 의 대신 으로도 사용할 수 있다.
for_each( vp.begin(), vp.end(), boost::mem_fn(&SomeObject::Print) );
// ToDo: delete...(^^;
return 0;
}
출력예
Taro
Jiro
Saburo
etc
표준 라이브러리의 mem_fun을 이용하면 ptr->Func()는 mem_fun(&Class::Func)( ptr ) 과 고쳐 쓸 수가 있습니다. 이 형태로 해 두면 for_each 등의 알고리즘을멤버 함수에 대해서도 이용할 수 있게 되어 편리합니다. 다만 이녀석은 obj.Func()의 경우는 mem_fun_ref(&Class::Func)( obj ) 과 다른 mem_fun_ref로 되어 함수를 사용할 필요가 있거나 인수를 취하지 않는 함수 밖에 사용할 수 없기도 하고 실은 상당히 유연성이 부족합니다. 거기서boost::mem_fn.
mem_fn라고 하는 하나의 이름으로 포인터판과 참조판 const있음과 없음, 인수의 수는 2개 이상에서도 OK 라고 폭넓게 서포트해 줍니다.
'메타프로그래밍 > Boost::' 카테고리의 다른 글
Boost::[bind, mem_fn ] 과 STL , 멤버함수 조합사용 (0) | 2012.11.13 |
---|---|
boost::bind (0) | 2012.11.13 |
boost::unordered_map (0) | 2012.11.13 |
boost::filesystem (파일, 디렉터리 다루기) (0) | 2012.11.04 |
boost::chrono, std::chrono [시간 측정하기] (0) | 2012.11.03 |