[Development] How to port from Q_FOREACH to range-based for
Mutz, Marc
marc at kdab.com
Tue Jun 11 20:47:12 CEST 2019
On 2019-06-11 09:48, Lars Knoll wrote:
>> On 11 Jun 2019, at 09:35, Olivier Goffart <olivier at woboq.com> wrote:
>>
>> On 11.06.19 09:17, Lars Knoll wrote:
>>> So, is removing it worth all the hassle to us and our users?
>>> Q_FOREACH is a macro and it doesn’t really cost us anything to keep
>>> it around. Yes, it has issues with non Qt containers and I wouldn’t
>>> recommend it for any new code. But maybe we could simply fix that
>>> part, but making Q_FOREACH emit a compiler warning if used on a
>>> container that’s not implicitly shared?
>>
>> +1
>> Although we should probably still discourage its usage in the
>> documentation.
>>
>> Regarding the compiler warning:
>> https://codereview.qt-project.org/c/qt/qtbase/+/244010
>>
>
> Nice. So doesn’t this solve most of the issues we have with Q_FOREACH
> (maybe with the exception that some people find macros ugly)?
If you look at the git history, you will find that it's not at all
maintenance-free code that just sits there. I just saw a C++17(!)-only
code path there when I rebased my deprecation patch to current dev the
other day.
There's also, as Peppe has repeatedly indicated (and never got a proper
reply to) the teaching/documentation issue: as long as Q_FOREACH stays,
undeprecated, we need to teach people about it: when to use and when not
to use. That's usually 10min or so of an intro Qt course that could be
better spent on teaching something more important.
If Q_FOREACH is deprecated, we can drop the slides, and a good chunk of
the docs.
This is a bit like the Fridays for Future generation clash: the new
developer asks "why is there Q_FOREACH if there's ranged-for?" and the
older devs answer: "because I wants my SUV, erhm, I mean Q_FOREACH".
Thanks,
Marc
More information about the Development
mailing list