Кажется, вы хотите следующее:
- Неявное связывание с
this
- Альтернатива для круглых скобок, связанных с вызовом функции, которая хранит привязку.
- Автоматическая идентификация, какие параметры в вашем лямбда-выражении связаны.
Первое очень сложно в C ++ сегодня, поскольку this
неявно присутствует в очень немногих контекстах, и вы, конечно, не можете передать его неявно функциям. То есть Вы не можете достичь этого с помощью библиотечной функции, но вы можете с помощью макроса. Тем не менее, это было бы ужасно.
Вторая часть намного проще:
button.clicked.handler = bind(BetBar::placeBet, this, bet_id);
Это просто требует handler.operator=(boost::function<void(*)()> const&)
Третий вопрос снова сложен, потому что вы только что разработали еще один случай двухфазного поиска имени. Это было достаточно сложно с шаблонами. Трюк Boost _1 работает, делая ясным, какие аргументы должны быть связаны позже. Тем не менее, _1 как имя не волшебство. Это в основном бесплатная функция, возвращающая boost :: arg <1>. Таким образом, с подходящим определением animator.eachFrame.newPos следующее можно сделать эквивалентным:
animator.eachFrame.handler = bind(&Widget::move, buttons[bet_id], _1)
animator.eachFrame.handler = bind(&Widget::move, buttons[bet_id], animator.eachFrame.newPos)