我需要创建一个模板类,它可以保存指向类型元素的指针T
,然后对它们执行函数。函数会来自不同的地方,所以我需要一个容器来存储它们,这样我以后可以调用它们。我决定使用std::unordered_set
,因为它提供了速度并限制了重复,因为它被实现为哈希表。我编写了一个完整的类,但由于没有为我定义的散列函数std::function
接受类型指针T
并返回,因此无法编译void
。为我使用的每种类型指定它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
,但它似乎提供了使这部分(以及我的其余代码)正常工作所需的一切。
我在想这个错误的方式吗?哈希 a 是完全不可能的std::function
吗?