为我的类编写自定义 qhash() 函数

Writing custom qhash() function for my class

本文关键字:qhash 函数 自定义 我的      更新时间:2023-10-16

我想使用QHash<MyOwnClass&, MyOwnEnum>(如果它很重要,作为MyOwnClass的成员(。文档说应该定义一个全局qhash(MyOwnClass&)函数。好的,例如:

globals.h:

#pragma once
#include "myOwnClass.h"
#include <QHashFunctions>
class MyOwnClass;
inline uint qHash(MyOwnClass& clz);

全局.cpp:

#include "globals.h"
inline uint qHash(MyOwnClass& clz) {
    return qHash(clz.getSomeQStringMember());
}

我应该在哪里包含我的globals.h,以便编译器能够查看和使用它?

我正在使用MSVS2015和Qt 5.8。我相信这个问题很愚蠢,并且有非常简单的解决方案,只要答案可以帮助像我这样的许多人。

如果您有将在哈希中使用的自定义类型,最好只是在声明 MyOwnClass 的同一标头中声明该函数。毕竟,它与该类齐头并进,您不需要globals.h即可获得全局函数,它只需要在全局范围内而不是静态的。

您还必须#include <QHash>定义哈希函数(实现(的位置,以便它可以访问现有的哈希实现。

编辑:我看到您包含#include <QHashFunctions>应该为您提供散列QString的功能。因此,您可能需要清理并重新生成项目。

@dtech的答案值得一读,但它并没有完全解决我的问题。

不能在QHash中使用非常量引用作为键,所以我应该将其声明为 QHash<const MyOwnClass&, MyOwnEnum> 并定义函数qHash(const MyOwnClass& clz)(当然,只要是相等运算符(。