gpt4 book ai didi

c++ - QMap 的这种使用可能有害吗?

转载 作者:行者123 更新时间:2023-11-30 02:55:09 25 4
gpt4 key购买 nike

#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里面的所有调用静态绑定(bind)到他们的 QMap版本而不是 QMultiMap版本,自QMap不适合多态使用(无虚拟析构函数)。

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

最佳答案

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

话虽如此,它可能会产生更直接的代码来避免 QMultiMap 并仅将 QMap 与 QMap::insertMulti() 而不是 QMap::insert() 一起使用。

关于c++ - QMap 的这种使用可能有害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com