Boost.Bind - понимание заполнителей

Я пытаюсь понять следующий пример, похожий (но не равный) на тот, который был опубликован ранее на 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 дважды. Я, должно быть, ошибаюсь. Я повторю свой вопрос еще раз, чтобы прояснить мою проблему: как внешняя связка знает, какой заполнитель использовался в какой внутренней?

7
задан Community 23 May 2017 в 12:18
поделиться