我需要创建一个模板类,可以保存指向类型为
下面是我的类中与相关成员和方法有关的精简摘录:
我并不完全依赖于使用
我想错了吗? 完全无法对
T
的元素的指针,并对它们执行函数。这些函数来自不同的地方,因此我需要一个容器来存储它们,以便稍后调用。我决定使用std::unordered_set
,因为它提供了速度并限制了重复,因为它实现为哈希表。我已经编写了整个类,但由于没有为我的接受类型为T
指针并返回void
的std::function
定义哈希函数,所以它无法编译。很容易用struct hash<std::function<void(MyCustomType*)>>
(也要重载()
运算符)为我使用的每种类型指定它,但是如何实际散列函数呢?下面是我的类中与相关成员和方法有关的精简摘录:
template <typename T>
class Master {
private:
std::unordered_set<std::function<void(T*)>> functions;
protected:
registerFunction(std::function<void(T*)> function) {
this->functions.insert(function);
}
unregisterFunction(std::function<void(T*)> function) {
this->functions.erase(function);
}
};
我并不完全依赖于使用
std :: unordered_set
,但它似乎提供我需要让这段代码(以及我的其他代码)正常工作的一切。我想错了吗? 完全无法对
std :: function
进行哈希处理吗?
std::function
可以持有任何兼容类型的 任何 函数对象。这就是它的全部意义,即类型擦除。如果没有访问其中包含的内容,你就无法对其进行哈希(或比较值)。即使std::function
想要给你访问权限,它基本上也做不到:你无法编写一个可以处理它的函数,因为类型可能是任何东西。 - Steve Jessop