Есть класс
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 >>