오랫만에 올리는 C++ of the Day입니다. :-) Question 파일 리스트를 필터링하는 기능을 구현하려고 합니다. 필터링에는 다수의 필터가 사용되며 따라서 다음과 같이 구현하려고 합니다. ((이번 글은 STL algorithm member function problem 을 가지고 작성되었습니다.)) struct Rule : std::unary_function { virtual result_type operator()(const argument_type&) const = 0; }; // concrete rules are inherited from the Rule class and define the operator() typedef boost::shared_ptr RulePtr; vector filelist; // ... fill filelist with a series of file names ... for(vector ::iterator iter = rules.begin(); iter != rules.end(); ++iter) { // This is the problem line... remove_if(fileList.begin(), fileList.end(), ??); } 이 기능을 제대로 구현하려면 어떻게 수정해야 할까요? Answer 위의 코드는 크게 두가지 문제가 있습니다. 첫째는 remove_if 함수의 선언을 보면 알 수 있습니다. template ForwardIterator remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 여기서 Predicate의 model은 결국 Assignable 임을 알 수 있습니다. 따라서 ?? 부분을 **iter와 같이 할 경우 remove_if의 Predicate template parameter는 Rule로 instantiation되며 Rule 클래스는 pure virtual로 Assignable하지 ...