Можно ли?
От: ArtDenis Россия  
Дата: 08.06.03 10:47
Оценка:
Есть класс
class TGraphLine
{
  ...
public:
  ...
  bool CheckRectHit(const TPoint &cur);
  ...
};

// и вектор элементов этого класса
std::vector<TGraphLine> lines;


Чтобы найти элемент в векторе для которого CheckRectHit(..) по нужному аргументу возвращает true, я сделал такой шаблон:
template
<
  typename CLASS_NAME, // TGraphLine
  typename ARG_TYPE    // TPoint
>
class arg_pred_func
{
  const ARG_TYPE arg;
  bool (CLASS_NAME::*func)(const ARG_TYPE&);

public:
  arg_pred_func(bool (CLASS_NAME::*p)(const ARG_TYPE&), ARG_TYPE argument)
    : func(p),
      arg(argument)
  {
  }

  const bool operator()(CLASS_NAME &element) const
  {
    return (element.*func)(arg);
  }
};


Сам поиск происходит следующим образом:
  TPoint crd = Point(10, 20);

  std::vector<TGraphLine>::iterator it = std::find_if
  (
    lines.begin(),
    lines.end(),
    arg_pred_func<TGraphLine, TPoint>(&TGraphLine::CheckRectHit, crd)
  );
  ...


Так вот, появился вопрос, можно ли всё это сделать стандартными средствами (STL, boost), т.е. без собственного предиката. Что-то мне кажется, что я в очередной раз изобретаю велосипед.

Денис.
... << RSDN@Home 1.0 beta 7a >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.