5

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

4

1 に答える 1