bind1st и bind2nd - PullRequest
       6

bind1st и bind2nd

2 голосов
/ 24 мая 2011

Я смотрел по ссылкам ниже:

bind1st

bind2nd

что я не понял, так эторазница между двумя.Может кто-нибудь помочь мне узнать разницу. Пример будет более полезным.

Ответы [ 4 ]

8 голосов
/ 24 мая 2011

bind1st связывает первый аргумент (например, у вас есть foo(int a, int b), тогда bind1st(foo, 1)(bar) будет эквивалентен foo(1, bar)), bind2nd второй.Не используйте их, тем не менее, они почти бесполезны - вместо этого используйте обобщенный boost::bind (или std::bind в C ++ 0x).

3 голосов
/ 24 мая 2011

Предположим, у вас есть объект функции f(x,y) и алгоритм, которому нужен функтоид только с одной переменной.Тогда есть две возможности:

  • Установить некоторое фиксированное значение для y и позволить алгоритму работать на x
  • Установить некоторое фиксированное значение для x и позволить алгоритму работатьy

В этом разница.

0 голосов
/ 31 января 2013

bind1st связывает первый параметр функции, в то время как bind2nd связывает второй параметр.если выполнять операцию, подобную функтору plus (), это не будет иметь никакого значения, так как сложение двух чисел остается одинаковым в обоих случаях, но если вы выполняете операцию, подобную minus (), то это имеет значение в зависимости от того, используете ли вы bind1st или bind2nd, пример 5-4 и 4-5 будут давать разные результаты, теперь у вас есть разница между привязкой первого параметра bind1st и привязкой второго параметра bind2.

0 голосов
/ 24 мая 2011

Это очевидно.bind1st связывает значение с первым операндом функтора (при условии, что вы знаете, что такое функтор в C ++), bind2nd - со вторым.Но для коммутативных операторов типа + (или std::plus) это фактически не имеет значения (если вы не перегружали + некоммутативным поведением в этом примере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...