Цитата(Hvoin @ 7.6.2008, 18:08 ) | | как с помощью find_if найти ss,ii,rr...Знаю что нужно перегрузить () только где, и как...какой |
велосипедный способ
| Код | template <typename T, typename Class, T Class::*member_ptr> struct field_selector : public std::unary_function<Class*, bool> { typedef std::unary_function<Class*, bool> base_type; typedef typename base_type::argument_type argument_type; typedef typename base_type::result_type result_type;
field_selector(const T& v) : v_(v) {} result_type operator()(const argument_type& it) const { return v_ == it->*member_ptr; } T v_; };
std::vector<parent*> v; std::find_if(v.begin(), v.end(), field_selector<int, parent, &parent::Power>(2)); std::find_if(v.begin(), v.end(), field_selector<std::string, parent, &parent::Name>("Petr Petrov")); |
boost-способ
| Код | std::vector<parent*> v; std::find_if(v.begin(), v.end(), boost::bind(&parent::Power, _1) == 2); std::find_if(v.begin(), v.end(), boost::bind(&parent::Name, _1) == "Petr Petrov"); |
|