суббота, 15 декабря 2012 г.

Чем отличается bind1st от bind2nd?

Пояснение работы этих функций bind1st и bind2nd. Они нужны тогда, когда мы из бинарной функции должны получить унарную. Напомню что унарная эта та функция, которая получает один аргумент, а бинарная два. При использовании стандартной библиотеки C++, в прочем если интересно, то ...

При юзании STL мы иногда должны уметь из бинарной получить унарную именно для этой цели нужны эти функциональные адаптеры. К примеру при использовании std::remove_if может потребоваться вызов функции сравнения на какое-то значение и если "да", то удалять.

Чтобы четче понять разницу между этими функциями можно взглянуть на:


bind1st binds the first parameter of plus() functor, and bind2nd binds the second parameter. In case of plus, it doesn't make any difference, as 10+20 and 20+10 are same.
But if you do that with minus, it would make difference, as 10-20 and 20-10 aren't same. Just try doing that.
Illustration:
int main () {
  auto p1 = bind1st(plus(),10);
  auto p2 = bind2nd(plus(),10);
  cout << p1(20) << endl;
  cout << p2(20) << endl;

  auto m1 = bind1st(minus(),10);
  auto m2 = bind2nd(minus(),10);
  cout << m1(20) << endl;
  cout << m2(20) << endl;
  return 0;
}
Output:
 30
 30
-10
 10

Нашел тут. Автору комментария респект за этот пример!

Комментариев нет: