QMap支持结构化绑定

定义RangeWarpper

template<class Map>
struct RangeWrapper {
    using MapIterator = typename Map::iterator;
    using Key = typename Map::key_type;
    using T = typename Map::mapped_type;
    Map &map;

    RangeWrapper(Map & map_) : map(map_) {}

    struct iterator {
        MapIterator mapIterator;

        iterator(const MapIterator &mapIterator_): mapIterator(mapIterator_) {}
        std::pair<Key,T> operator*() {
            return {mapIterator.key(), mapIterator.value()};
        }
        iterator & operator++() {
            ++mapIterator;
            return *this;
        }
        bool operator!=(const iterator & other) {
            return this->mapIterator != other.mapIterator;
        }
    };
    iterator begin() {
        return map.begin();
    }
    iterator end() {
        return map.end();
    }
};

// Function to be able to use automatic template type deduction
template<class Map>
RangeWrapper<Map> toRange(Map & map)
{
    return RangeWrapper<Map>(map);
}

实际使用

// Usage code
QMap<QString, QString> extensions;
for(auto [key, value] : toRange(extensions)) {
	qDebug()<< key << value;
}
posted @ 2025-09-29 13:37  YueSS  阅读(3)  评论(0)    收藏  举报