[英]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
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.