аргументы упаковываются в кортеж (a, b) и передаются функторам.тогда внутренний функтор решает, какой элемент кортежа ему нужен, например, try:
boost::bind(&X::value, _1)(a,b)
boost::bind(&X::value, _2)(a,b)
В более общем смысле каждое значение, независимо от того, является ли оно константным, / ссылка / местозаполнитель представляется как функтор, который принимает аргумент кортеж и возвращает значение.1004 *
bind(f, 10)(a) // still functor which discards arguments
Теперь я не уверен на сто процентов, как это делает связывание.тем не менее, именно так Phoenix реализует свою функциональность.если вы пытаетесь понять механизм реализации bind / lambda, посмотрите на phoenix, он очень расширяемый и имеет отличную документацию.