T
型の要素へのポインターを保持し、それらに対して関数を実行できるテンプレート化されたクラスを作成する必要があります。関数はさまざまな場所から取得されるため、後で呼び出すことができるように、関数を格納するためのコンテナーが必要です。std::unordered_set
ハッシュテーブルとして実装されているため、速度が向上し、重複が制限されるため、を使用することにしました。std::function
クラス全体を作成しましたが、型のポインターを取り、T
を返すmy 用に定義されたハッシュ関数がないため、コンパイルされません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
ですか?