簡體   English   中英

定義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

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM