定义 std::hash<std::function>
Define std::hash<std::function>
我需要创建一个模板化类,该类可以保存指向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
,但它似乎提供了使这篇文章(以及我的其余代码)正常工作所需的一切。
我是不是想错了?是否完全不可能散列std::function
?
集合主要是检查数据是否在其中的东西。
所以我不认为在这里使用一个有什么意义。。。你会有你的函数,你会把它们存储在集合中,然后呢?你只是重复它们?
对于您的问题,集合的元素应该有一种生成哈希和operator==()
的方法。第二个没有为std::function
提供,因此您将无法检查您的函数是否真的在集合中。
因此,即使你找到了从函数生成哈希的方法,你也会陷入困境。。。我不知道如何满足散列要求。
为什么不简单地使用std::vector
呢?
相关文章:
- Confusion: decltype vs std::function
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 将函数包装器转换为 std::function
- 类型擦除的std::function与虚拟函数调用的开销
- C++ std::function 对于类 exept 的所有实例都是空的(只有 Visual2019 编译器问题)
- 如果模板没有可变参数,则 Lambda 被推导出为 std::function
- 将 lambda 表达式传递给 std::function in C++
- 模板类的部分模板专用化,如 std::function
- 可变参数模板参数扩展 类型为 std::function 的类成员
- 从 std::function in C++ 访问模板化 lambda
- 什么是 std::function::argument_type 的替代品?
- C++派生类重载函数(带有 std::function 参数)不可见
- 如何在 qi 符号表中使用 std::function
- 将 std::function 与模板一起使用
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数
- 我需要在 std::function 上使用 unique_ptr 吗?
- 如何将函数指针从 std::function 传递到 Linux 克隆?