Baranowski, Daniel schrieb:
Hey all!
I've really enjoyed using boost::bind for calling member functions and such. I wish I had found this earlier!
Anyhow, I'm trying to write for_each statement that only passes the object to a function if certain conditions are met. Unfortunately, I'm not well versed enough in boost::bind (and I've never used the lambda library) so I'm not sure how to do this! Can someone lend me a hand? I couldn't find anything in the mail archives.
If I were writing a regular for-loop, this is how it would look: vector<MyObjClass> myVector; myVector.push_back(MyObjClass(2)); myVector.push_back(MyObjClass(3)); myVector.push_back(MyObjClass(3)); myVector.push_back(MyObjClass(5)); myVector.push_back(MyObjClass(6));
vector<MyObjClass>::iterator end = myVector.end(); vector<MyObjClass>::iterator itr; for(itr = myVector.begin(); itr != end; ++itr) { if((*itr).GetValue() == 3) ProcessingFunction(*itr); }
And here's the for_each that just passes every object into the processing function: // From inside a function in a class called ThisClass vector<MyObjClass> myVector; myVector.push_back(MyObjClass(2)); myVector.push_back(MyObjClass(3)); myVector.push_back(MyObjClass(3)); myVector.push_back(MyObjClass(5)); myVector.push_back(MyObjClass(6));
vector<MyObjClass>::iterator begin = myVector.begin(); vector<MyObjClass>::iterator end = myVector.end();
for_each(begin, end, boost::bind(&ThisClass::ProcessingFunction, this, _1));
So I guess the question is, how do I add the condition into the for_each? I know there's got to be a way!
Hi Daniel, I think you can solve your problem with a boost::filter_iterator which implements your condition. Then, pass this iterator(s) to for_each. Have fun, Christian