Передавать предикаты std algos по ссылке в C ++

Я пытаюсь удалить элементы из std :: list и сохранить некоторую статистику удаленных элементов.

Для этого я использую функцию remove_if из списка и у меня есть предикат. Я хотел бы использовать этот предикат для сбора статистики. Вот код для предиката:

  class TestPredicate
  {
  private:
    int limit_;

  public:
    int sum;
    int count;
    TestPredicate(int limit) : limit_(limit), sum(0), count(0) {}

    bool operator() (int value) 
    {
      if (value >= limit_)
      {
        sum += value;
        ++count;       // Part where I gather the stats
        return true;
      }
      else
        return false;
    }
  };

А вот код для алгоритма:

std::list < int > container;
container.push_back(11);
TestPredicate pred(10);
container.remove_if(pred)
assert(pred.count == 1);

К сожалению, утверждение неверно, потому что предикат передается по значению. Есть ли способ принудительно передать его по ссылке?

9
задан Arthur 29 November 2011 в 15:28
поделиться