Help me understand this usage of boost::bind

前端 未结 2 1579
梦毁少年i
梦毁少年i 2021-01-31 20:58

Please have a look at this example posted by Johannes Schaub to sort a vector of pairs:

How do I sort a vector of pairs based on the second element of the pair?

相关标签:
2条回答
  • 2021-01-31 21:37

    Your theory is correct, see:

    http://www.boost.org/doc/libs/1_44_0/libs/bind/bind.html#operators

    0 讨论(0)
  • 2021-01-31 21:46

    boost::bind overloads the operator ! and the relational and logical operators ==, !=, <, <=, >, >=, &&, ||, so this is why you "see" a boolean expression, but you're really getting back a function predicate.

    From there you can see that you're binding the second member of the pair for the 1st and 2nd arguments of the overloaded less than function.

    As for your second question: Boost bind will recognize when you have passed a pointer to a member and treat it as if you called

    bind<R>(mem_fun(&std::pair<int,int>::second), args);
    

    This is how the documentation describes this:

    Using bind with pointers to members

    Pointers to member functions and pointers to data members are not function objects, because they do not support operator(). For convenience, bind accepts member pointers as its first argument, and the behavior is as if boost::mem_fn has been used to convert the member pointer into a function object. In other words, the expression

    bind(&X::f, args)

    is equivalent to

    bind(mem_fn(&X::f), args)

    where R is the return type of X::f (for member functions) or the type of the member (for data members.)

    You can find this and more information here.

    0 讨论(0)
提交回复
热议问题