Как передать два параметра при использовании станд.:: mem_fun?

@ DongXu ответ правильный. Однако я предлагаю сделать эти расчеты в методе UICollectionViewFlowLayout prepare(). Это предотвратит множественные вычисления для атрибутов одной ячейки. Более того, prepare() - лучшее место для управления кэшем атрибутов.

11
задан Naveen 22 June 2009 в 12:40
поделиться

3 ответа

You could create your own functor like this:

class Apply
{
private:
  int arg1, arg2;

public:
  Apply(int n, int n1)
    : arg1(n), arg2(n1) 
  {}        

  void operator() (I* pI) const
  {
    pI->fun(arg1, arg2);
  }
};

int main ()
{
  // ...
  std::for_each(a.begin(), a.end(), Apply(n, n1));
}

or use boost::bind like this:

std::for_each(
  a.begin(),
  a.end(),
  boost::bind(&I::fun, _1, n, n1));
7
ответ дан 3 December 2019 в 09:20
поделиться

Вы не можете сделать это с помощью связывателей std. Конечно, вы можете написать свой собственный функтор.

struct TwoArguments
{
   int one;
   int two;

   TwoArguments( int one, int two ) : one(one),two(two){
   }

   void operator()( I* i ) const {
       i->fun( one, two );
   }
};
4
ответ дан 3 December 2019 в 09:20
поделиться

Другой способ сделать это - использовать шаблоны. (Пожалуйста, скажите мне, если это плохая практика!)

template<int N, int N1>
void Apply(I* i)
{
  i->fun(N, N1);
}

std::for_each(a.begin(), a.end(), Apply<firstParam, secondParam>);

Это было бы хорошо, если бы вы не собирались вызывать его с множеством разных параметров, поскольку он будет генерировать код для каждой комбинации, которую вы сделали.

1
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: