不要误解:Boost的bind()
很棒。
但是我讨厌使用它编写和阅读代码,而且我已经放弃同事们会理解和使用它的希望了。
最终我的代码看起来像这样:
btn.clicked.connect(bind(&BetBar::placeBet, this, bet_id));
animator.eachFrame.connect(bind(&Widget::move, buttons[bet_id]));
虽然这很合乎逻辑,但远非我所称之为良好的代码。
举个例子,在 C++1x 中我们将会有这样的代码:
btn.clicked.connect([&](int bet_id){ placeBet(bet_id); })
animator.eachFrame.connect([&](Point newPos) { buttons[bet_id].move(newPos) })
一个好的DSL应该长成这样:
on(btn.clicked) placeBet(bet_id);
on(animator.eachFrame) buttons[bet_id].move(eachFrame::newPos);
你如何处理C++中的绑定?你只是接受boost提供的一切吗?