Это зависит от того, для чего Вы хотите использовать его. Типичная причина сделать так состоит в том, чтобы выполнить итерации по картам, для которых Вы просто делаете это (Java 5 +):
Map<String, Object> map = ... ; // just an example
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.printf("%s -> %s\n", entry.getKey(), entry.getValue());
}
За кулисами он использует указатель на член и применяет его к переданному аргументу. Это довольно сложно в контексте связывания, поэтому вот простой пример использования указателя на член:
int main()
{
std::pair< int, int > p1 = make_pair( 1, 2 );
std::pair< int, int > p2 = make_pair( 2, 4 );
int std::pair<int,int>::*ptr = &std::pair<int,int>::second; // pointer to second member
std::cout << p1.*ptr << std::endl; // 2 dereference pointer to member
std::cout << p2.*ptr << std::endl; // 4 dereference pointer to member
}
За кулисами связывание составляет различные вызовы. Результирующий функтор принимает разыменование std :: map <> :: iterator (типа std :: pair (* it) .second
внешней привязке, которая передает это значение методу print_string
для окончательного вызова: print_string ((* it) .second)
.
(* it)
на самом деле _1
, о котором вы спрашивали. Все _ #
являются заполнителями, то есть результатом связывания будет функтор, который будет принимать столько аргументов, сколько существует различных заполнителей в порядке, определяемом количеством заполнителей. В приведенном вами примере результирующий функтор принимает единственный аргумент _1
.
(* it)
на самом деле _1
, о котором вы спрашивали. Все _ #
являются заполнителями, то есть результатом связывания будет функтор, который будет принимать столько аргументов, сколько существует различных заполнителей в порядке, определяемом количеством заполнителей. В приведенном вами примере результирующий функтор принимает единственный аргумент _1
.
(* it)
на самом деле _1
, о котором вы спрашивали. Все _ #
являются заполнителями, то есть результатом связывания будет функтор, который будет принимать столько аргументов, сколько существует различных заполнителей в порядке, определяемом количеством заполнителей. В приведенном вами примере результирующий функтор принимает единственный аргумент _1
.
boost::bind(&std::pair<U,V>::second, _1);
функционально эквивалентен
std::pair<U,V> p -> p.second
, т.е. это функция (объект), которая отображает пару
на ее второй
член.