On Thu, Feb 19, 2015 at 03:41:42PM -0500, Matthew Woehlke wrote: > On 2015-02-19 15:21, Marc Mutz wrote: > > On Thursday 19 February 2015 13:29:48 Daniel Teske wrote: > >> more than 400 lambdas in Creator's source > > > > Sounds like lambdas are overused (as any new language feature is overused > > before it's fully understood by the resp. language community). > > Maybe, maybe not. > > I'm not sure I've even *written* 400 lambdas yet :-), but I find myself > using them most often in QObject::connect. Basically, a lambda saves > writing a protected (or worse, *private*) slot by allowing the relevant > code to be written inline. These are rarely more than a few lines long, > and it's not unusual for them to be one-liners, e.g.: > > connect(d->UI.scrollBar, &QAbstractSlider::valueChanged, > [d](int value){ d->scrollTo(value); });
That's one (good) example. Another one would be to avoid passing data through QAction::data and using QObject::sender() in cases like void someSlot() { const QAction *action = qobject_cast<const QAction *>(sender()); /* FIXME: check action */ Data data = action->data().value<Data>(); foo()->useData(data); } /* ... possibly lots of lines inbetween ... */ { ... Data data = /*...*/; QAction *action = new QAction(...) action->setData(data); connect(action, &QAction::triggered, this, &ThisClass::someSlot); ... } vs: { ... Data data = /*...*/; QAction *act = new QAction(...) connect(act, &QAction::triggered, [this, data] { foo()->useData(data); } ... } This is less than half the code, is type-safe, an keeps related code in one place. One line to express one idea. No awkward boilerplate. Andre' PS: I probably should praise Olivier more often for the new connect syntax. Personally I think that's the #1 feature in Qt 5. It makes a real (positive) difference in Qt application development. PPS: > > What about boost::function? > > Ugh, make Qt depend on boost? No, thanks... *grin* Indeed. _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development