2011-05-24 3 views
2

я имел вид на приведенные ниже ссылки:bind1st и bind2nd

bind1st

bind2nd

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

ответ

8

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

+6

Если у вас нет C++ 0x или вы не хотите прикладывать повышенную зависимость, они приходят очень удобно. –

+0

у них было предельное использование для унарных предикатов ... однако согласовано, если вы хотите, чтобы функтор использовал 'boost :: function' в сочетании с' boost :: bind' – AJG85

+2

@ChristianRau: Вот почему я сказал «почти» не «полностью», бесполезный. Хотя избегать Boost просто контрпродуктивно. –

3

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

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

Это разница.

0

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

0

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

Смежные вопросы