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

时间:2017-05-14 12:45:41

标签: c++ qt qhash

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

globals.h:

#pragma once
#include "myOwnClass.h"
#include <QHashFunctions>

class MyOwnClass;

inline uint qHash(MyOwnClass& clz);

globals.cpp:

#include "globals.h"

inline uint qHash(MyOwnClass& clz) {
    return qHash(clz.getSomeQStringMember());
}

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

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

2 个答案:

答案 0 :(得分:1)

如果您将在散列中使用自定义类型,则最好在声明MyOwnClass的同一标头中声明该函数。毕竟,它与该课程密切相关,为了拥有全局功能,你不需要globals.h,它只需要在全局范围内而不是静态的。

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

编辑:我看到您包含#include <QHashFunctions>,它应该为您提供哈希QString的功能。所以你可能需要清理和重建你的项目。

答案 1 :(得分:0)

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

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