[Development] Proposal: Deprecating platforms in Qt 5.6 that don't support lambda

Sebastian Lehmann qt at leemes.de
Sat Feb 21 10:46:41 CET 2015


Just want to throw in my "foreach key/value" loop implementation, as an 
extension of "foreach", which I did years ago just as a proof of 
concept.

http://codereview.stackexchange.com/questions/11681/

It allows you to do:

     foreachkv(auto key, auto value, map) {
         // do sth with key / value
     }

Its implementation follows straight out of how Q_FOREACH is implemented, 
just adding another for-loop. I only implemented the GCC version back 
then, though.


On 20.02.2015 18:53, Matthew Woehlke wrote:
> On 2015-02-20 07:10, Иван Комиссаров wrote:
>> Sorry for interupting the discussion, but i saw mentioning of a
>> range-based-for, so i have a question. std::map/unordered_map uses
>> std::pair as a value type, and map::iterator::operator* returns 
>> reference
>> to a pair, while Qt doesn't have an underlying struct and operator* 
>> returns
>> ref to T (without a Key). So, using range-based-for (and foreach) with 
>> Qt
>> containers doesn't allow to have an access to a key.
>> Should this behavior be changed in the future (yes, this breaks source
>> compatibility)?
> 
> No. No need. (Also... note that foreach doesn't give you keys either.)
> 
> You can instead wrap the container in an iterator wrapper that gives 
> you
> iterators rather than values. (I have code somewhere, but not sure I
> have permission to share it.) No SIC, and you can still iterate 
> directly
> over values.
> 
> It's not entirely unlike the trick to do:
> 
>   for (auto const i : qtIndexRange(5))
> 
> ...and looks like:
> 
>   for (auto const i : qtEnumerate(map))
> 
> Maybe it would be nice for Qt to provide one or both of these?



More information about the Development mailing list