Если мы посмотрим на C ++ 03 20.3.6.1 и 20.3.6.2, то увидим, что для аргумента функтора bind1st
у нас есть требование трех typedef
с (для типа результата, первого и второго аргумент), и что результирующий оператор принимает только один аргумент.
Это означает, что мы не можем просто использовать bind1st
просто для простых указателей на функции, поскольку у них нет этих typedef
s. Также мы можем использовать bind1st
только для двоичных функций, так как у нас нет поддержки для большего количества параметров. Более того, boost::bind
и др. имеют преимущество в том, что могут изменять порядок параметров и, конечно, поддерживать больше, чем просто первый.
Мне кажется, что в большинстве случаев связыватель предназначен для свободных функций и функций-членов, а не для объектов-функторов; поэтому использование bind1st
весьма ограничено (хотя и расширяется за счет использования других инструментов, таких как ptr_fun
, но сомнительно, делает ли это его более удобным). Конечно, это только на основе личного опыта, но кто-то может захотеть сделать статистику поиска кода Google для bind1st
.