【问题标题】:Getting Java style Iterator from QMap<K, T> without specifying T, K从 QMap<K, T> 获取 Java 风格的迭代器而不指定 T, K
【发布时间】:2018-07-07 16:48:10
【问题描述】:

有没有什么方法可以在不明确指定 K 和 T 的情况下从 QMap 获取 java 样式的迭代器?

例如写作

QMap<QString, SomeType> map;
auto qIt = map.getIterator();

而不是

QMap<QString, SomeType> map;
QMapIterator<QString, SomeType> qIt(map);

【问题讨论】:

  • 你想达到什么目的?你期望迭代器代表什么?
  • 只是为了减少编码。在 C++ 中使用 auto 非常有趣,在 QMapIterator 的情况下,auto 的使用将受到限制,您应该明确定义 qmap 使用的类型,有时可能会很乏味
  • 我知道这并不能回答您的问题,但它可能会帮助其他人知道 STL 样式的迭代器可以与 for (auto iter=map.cbegin (); iter != map.cend (); ++iter) {...} 一起愉快地工作。我不知道非 const 迭代器是否也能正常工作,只是我通常像上面那样使用 const 迭代器。

标签: c++ qt qtcore


【解决方案1】:

如果您只是想节省一些重复输入,那么您可以编写一个小函数模板来利用模板参数将从传递的参数推导出来的事实......

template<typename Key, typename Value>
QMapIterator<Key, Value> make_qiter (QMap<Key, Value> &map)
{
  return(QMapIterator<Key, Value>(map));
}

然后用作...

QMap<QString, SomeType> map;
auto qIt = make_qiter(map);

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2015-05-04
    • 1970-01-01
    • 2023-03-11
    • 2019-02-02
    • 1970-01-01
    • 2014-02-09
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多