2012-03-29 3 views
1

나는 개체 컨테이너를 가지고 있습니다; 클래스 Foo는 멤버 함수 id()가 정수 식별자를 반환합니다. 이제 stl 알고리즘 remove_if를 사용하여 id가 값보다 작은 일부 객체를 제거하고 싶습니다. id가 인 함수를 제공하고 싶지 않습니다. STL을 사용하여 한 줄짜리 코드를 작성하고 구현하기 위해 부스트를 작성할 수 있다면 가능합니다.stl 클래스 멤버 함수 결과 remove_if

class Foo{ 
public: 
    unsigned id() const {return id_;} 
    ... 
private: 
    unsigned id_ 
    ... 
}; 
list<Foo> foo_list; 
std::remove_if(foo_list.begin(), foo_list.end(), ???); 

STL은 표준 : : bind2nd, STL :: 이하(), 표준 : mem_fun_ref() 또는 다른 STL과 기능이 작업을 수행 할 수 있습니다.

+0

최신 컴파일러를 사용하려면 [lambdas] (http://en.cppreference.com/w/cpp/language/lambda)를 찾아보십시오. –

+0

@ Joachim Pileborg 저는 C++ 11 지원없이 vs2005를 사용합니다. –

+0

글쎄, 당신은 그 세번째 도우미와 함께 올바른 길을 걷고 있지만 불행히도 C++에는 SGI의 compose 함수 어댑터가 포함되어 있지 않습니다. 그래서 당신은 당신 자신의 펑터를 두드리지 않을 것입니다. 이것이 바로 C++ 11의 람다 (그리고 일반화 된 바인더)가 표준 알고리즘의 유용성을 훨씬 향상시키는 이유입니다. –

답변

2

그래, 당신이 Foo의 인터페이스를 약간 변경하는 것에 동의하면 람다 없이도 가능합니다.