Я пытаюсь понять следующий пример, похожий (но не равный) на тот, который был опубликован ранее на SO Помогите понять boost :: аргументы-заполнители привязки :
#include
#include
struct X {
int value;
};
int main() {
X a = { 1 };
X b = { 2 };
boost::bind(std::less(),
boost::bind(&X::value, _1),
boost::bind(&X::value, _2))
(a, b);
}
Как это возможно, что самая внешняя функция привязки знает, что она должна передать первый аргумент второй привязке (которая ожидает _1
), а вторая аргумент третьей привязки (который ожидает _2
)? Насколько я понимаю, сначала оцениваются внутренние связующие, поэтому они становятся двумя унарными функциональными объектами, которые позже передаются связке объекта less
. И когда вновь созданный функциональный объект вызывается с двумя объектами, a
переходит к первой внутренней привязке, а b
переходит ко второму. Если бы я был прав, мы бы использовали _1
дважды. Я, должно быть, ошибаюсь. Я повторю свой вопрос еще раз, чтобы прояснить мою проблему: как внешняя связка знает, какой заполнитель использовался в какой внутренней?