Re: STL algorithm member function problem
Markus Moll ha scritto:
1. remove_if is not doing what you think it does. remove_if(b,e,pred)
returns an iterator k such that the range [b,k) contains those elements x
for which pred(x) is false. Nevertheless, no elements are actually removed
from the underlying container (you couldn't, only given the iterators. And
maybe you couldn't at all. Consider int arr[42] }
2. ptr_fun is not doing what you think it does. It is just a wrapper around
ordinary pointers to functions, so that you suddenly have the member
typedefs argument_type and result_type. The predicate you are looking for
is *ruleIter.
Correcting both, we get:
vector<string>::iterator current_end = fileList.end();
for(vector<RulePtr>::const_iterator ruleIter = m_rules.begin();
ruleIter != m_rules.end(); ++ruleIter) {
current_end = std::remove_if(fileList.begin(), current_end, *ruleIter);
}
This code is not doing what you think it does ;-) It suffers the slicing
problem. In fact it won't even compile because Rule is an abstract
class, which can't be passed by-value, but would it be incorrect
regardless of that. See my other post for details.
Ganesh
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]