tags:

views:

146

answers:

2

I have a std::vector and I want to check a specific attribute of each element. SomeStruct has an attribute 'type'. I want to check this attribute to be either Type1 or Type2.

My plan is to use boost::lambda.

std::vector<SomeStruct>::const_iterator it = std::find_if(vec.begin(), vec.end(), _1.type == SomeStruct::Type1 || _1.type == SomeStruct::Type2);

Because I need to access a specific attribute of each element, I'm not sure if I can use boost::lambda at all.

Any hints?

+4  A: 
std::find_if(vec.begin(), vec.end(), bind(&SomeStruct::type, _1) == SomeStruct::Type1 || bind(&SomeStruct::type, _1) == SomeStruct::Type2);
sepp2k
+1  A: 

Your expression does not compile because of

_1.type

The dot operator cannot be overloaded so your expression cannot work as a lambda expression, It's simply referring to member type of the object _1 defined in boost::lambda.hpp. Well, I don't know what is _1 type and thinking about this type makes me shudder - it's not for us, mortals to know it :-).
The proper expression is given by sepp2k.

Tadeusz Kopec
The type of `_1` is `boost::lambda::placeholder1_type`.
sepp2k