5

我需要创建一个模板类,它可以保存指向类型元素的指针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吗?

4

1 回答 1

3

集合主要是您将检查数据是否在其中的东西。

所以我看不出在这里使用一个的意义......你将拥有你的功能并将它们存储在集合中,然后呢?你只是迭代它们?

对于您的问题,集合的元素应该有一种方法来生成哈希和operator==(). 第二个没有提供std::function,因此您将无法检查您的函数是否真的在集合中。

因此,即使您找到一种从函数生成哈希的方法,您也会被卡住......而且我看不出如何满足哈希要求。

为什么不简单地使用 a std::vector

于 2013-12-19T22:27:55.417 回答