我正在尝试理解以下示例,该示例类似于(但不等于)之前在 SO Help 上发布的示例,以了解 boost::bind 占位符参数:
#include <boost/bind.hpp>
#include <functional>
struct X {
int value;
};
int main() {
X a = { 1 };
X b = { 2 };
boost::bind(std::less<int>(),
boost::bind(&X::value, _1),
boost::bind(&X::value, _2))
(a, b);
}
这怎么可能,最外面的绑定函数知道它必须将第一个参数传递给第二个绑定(期望_1
),并将第二个参数传递给第三个绑定(期望_2
)?我看到这个的方式是首先评估内部绑定器,因此它们成为两个一元功能对象,稍后传递给less<int>
对象的绑定器。当使用两个对象调用新创建的功能对象时,a
转到第一个内部绑定,然后b
转到第二个。如果我是对的,我们会使用_1
两次。我一定是错的。我将再次重复我的问题以明确我的问题:外部活页夹如何知道在哪个内部活页夹中使用了哪个占位符?