Skip to content

2014 07 16 컨테이너에서 멤버 함수의 호출

krikit edited this page Nov 26, 2014 · 2 revisions

컨테이너에서 멤버 함수의 호출

컨테이너에 객체를 담고 있고 알고리즘에 넘겨줄 콜백 함수로 해당 객체의 메서드를 사용하고자 할 경우가 있습니다. 예를 들어 문자열을 담고있는 벡터가 있을 때 문자열의 empty() 메서드를 이용하여 find_if() 알고리즘을 사용하고자 할 경우입니다.

const std::vector<std::string> str_vec;
auto iter = std::find_if(str_vec.begin(), str_vec.end(), std::mem_fn(&std::string::empty));

위 코드에서 사용한 mem_fn() 함수는 멤버 메서드의 포인터를 알고리즘에서 호출할 수 있도록 해줍니다. C++11에서만 제공하는 함수이며 그 이전에는 mem_fun()과 mem_fun_ref() 두 가지가 제공되었습니다만 차이는 생략하도록 하겠습니다.

이렇게 멤버 함수를 호출하는 경우에도 역시 람다 함수를 사용하면 좀더 직관적입니다.

auto iter = std::find_if(str_vec.begin(), str_vec.end(),
    [](const std::string& str){ return str.empty(); });
Clone this wiki locally