Почему QHash () не имеет перегрузки для std :: shared_ptr?

К моему удивлению, я только что обнаружил, что следующий код не компилируется из коробки в C ++ 14 с использованием Qt 5.4:

QSet<std::shared_ptr<SomeType>> var;

Проблема в том, что нет перегрузки qHash() метод для std::shared_ptrили любой другой умный указатель, насколько я вижу:
http://doc.qt.io/qt-5/qhash.html#related-non-members

Мне кажется естественным иметь следующую перегрузку (или что-то подобное):

template <typename T>
uint qHash(const std::shared_ptr<T>& ptr, uint seed = 0)
{
return qHash(ptr.get(), seed);
}

но его не существует. Это не может быть просто то, что пропустили разработчики Qt. Нужно ли включать специальный заголовок? Какова причина, почему это не существует?

1

Решение

Говори о дьяволе, и он явится:
https://codereview.qt-project.org/113340

Это не может быть просто то, что пропустили разработчики Qt.

Это не упущение, просто Qt не имеет бесконечных ресурсов для добавления qHash перегрузки к любому типу STL, который имеет operator==,

2

Другие решения

Это не может быть просто то, что пропустили разработчики Qt.

Это так, и это не то, что упустили из виду — просто невозможно написать весь код сразу. Нужно где-то остановиться и сделать релиз. Не стесняйтесь представить ревизию кода, которая исправит это 🙂 Убедитесь, что ревизия будет собираться на всех платформах и со всеми поддерживаемыми компиляторами — некоторые из них имеют библиотеки без std::shared_ptr!

1

По вопросам рекламы [email protected]