ptr_fun, mem_fun, mem_fun_ref 의 필요성
STL 2007. 9. 6. 14:42 |for_each()를 사용할때
//클래스
class Widget {
public:
Widget(int var) : value(var) {}
void Test() {
cout << "값 " << value << endl;
}
public:
int value;
};
//함수 선언
void Test(Widget& w){
cout << w.value << endl;
}
//사용하는곳
vector<Widget> vw;
vw.push_back(Widget(1));
vw.push_back(Widget(2));
vw.push_back(Widget(3));
vw.push_back(Widget(4));
vw.push_back(Widget(5));
//일반 함수는 Test 또는 ptr_fun(Test) 라고 하면 됩니다.
for_each(vw.begin(), vw.end(), Test);
for_each(vw.begin(), vw.end(), ptr_fun(Test));
//클래스 내부의 함수를 접근 할 때는 vw의 형태가 참조냐 포인터냐에 따라서
//달라 집니다. 참조 이기 때문에 mem_fun_ref(&Widget::Test)를 사용합니다.
for_each(vw.begin(), vw.end(), mem_fun_ref(&Widget::Test));
vector<Widget*> lpw;
lpw.push_back(new Widget(1));
lpw.push_back(new Widget(2));
lpw.push_back(new Widget(3));
lpw.push_back(new Widget(4));
lpw.push_back(new Widget(5));
//포인터이기 때문에 mem_fun(&Widget::Test)를 사용하게 되지요.
for_each(lpw.begin(), lpw.end(), mem_fun(&Widget::Test));