std::function が等価比較できない理由
C では、 std::function は、作業を可能にする汎用の呼び出し可能なラッパーです。任意の関数オブジェクトを使用します。 std::function はその有用性にもかかわらず、等価比較 (==) をサポートしていません。 Boost::function と std::tr1::function は同じ動作を示します。
歴史的コンテキスト
C 11 標準の以前のドラフトでは、std::function等価演算子のオーバーロードがありました。ただし、これらのオーバーロードは後に、「型システムの潜在的な穴」を塞ぐという理由で、削除されたと宣言されました。 C 11 ドラフトで言及されているのは、暗黙的な bool 変換が予期しない等価比較を引き起こす可能性に関するものです。 C 03 では、この問題を回避するために、safe-bool イディオムが導入され、C 11 では、明示的な bool 変換関数が導入されました。ただし、これらの対策では、予期しない等価比較の可能性が完全に排除されるわけではありません。
std::function に関する具体的な考慮事項
std::shared_ptr とは異なり、等価性セマンティクスが定義されているため (等価性は同じオブジェクトを指すことを意味します)、std::function には明確な等価性の概念がありません。次の点を考慮してください:
異なる引数バインディングで構築された同等の関数は、等しくないと比較されます。
基礎となる型が異なる関数 (例: ラムダと関数ポインタ) は、等しくないと比較されます。一般的な等価性チェック コードを記述します。
セットのようなコンテナで std::function を使用する場合、潜在的な曖昧さがあります。関数をチェーンするときに論理エラーが発生する可能性が高くなります。以上が`std::function` オブジェクトが等しいかどうかを比較できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。