1
#include <QMultiMap>

template <typename TKey, typename TValue>
TKey lastKeyOf(const QMap<TKey, TValue>& map)
{
    if (map.isEmpty())
        throw something;
    return (map.end() - 1).key();
}

我问的原因是:

template <typename TKey, typename TValue>
QMultiMap<TKey, TValue>;

QMap<TKey, TValue>公开继承。所以如果我打电话:

QMultiMap<int, std::string> multimap;
...
lastKeyOf(multimap);

内部的所有调用lastKeyOf都静态绑定到它们的QMap版本而不是QMultiMap版本,因为QMap不打算用于多态使用(没有虚拟析构函数)。

我什至不确定这种用途叫什么。是对象切片吗?

4

1 回答 1

3

我相信这应该是安全的。QMultiMap 只是向 QMap 添加了一组新的重载方法,如果您使用 QMultiMap 中重载的 lastKeyOf() 中的函数以具有不同的行为,您只会得到意想不到的结果。我能看到的唯一具有兼容签名和不同行为的重载方法是 insert()。

话虽如此,它可能会使代码更直接,以避免 QMultiMap 并仅使用 QMap::insertMulti() 而不是 QMap::insert()。

于 2013-05-20T14:41:20.690 回答