반응형



http://jacking75.cafe24.com/Boost/bind/mem_fn_Sample.html


출처 : http://www.kmonos.net/alang/boost/classes/mem_fn.html

 

 

 

boost::mem_fn

abstract

필요한 헤더

<boost/mem_fn.hpp>

  있는 

멤버 함수를 보통 함수 같게 고치는

레퍼런스

en / jp

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 라고 폭넓게 서포트해 줍니다.

 

반응형

+ Recent posts