最初の質問:
std::function はなぜ等価比較できないのか (またboost::function と std::tr1::function に適用可能) 同等ではありませんか?
答え:
比較できない理由:
std::function は、幅広い呼び出し可能な型に対応するように設計されています。すべての呼び出し可能な型に等価比較を課すことは、実装者にとって負担になります。さらに、たとえ実装されたとしても、等価性チェックは範囲が狭く、別の方法で構築された同等の関数を考慮していない可能性があります。
「型システムの潜在的な穴」 説明:
削除オーバーロードされた == 演算子と != 演算子はそれらの使用を完全に阻止し、関数を暗黙的に比較しようとするとコンパイル時エラーが発生します。このアプローチにより、意図しない、または問題のある暗黙的な変換の可能性が排除されます。
std::shared_ptr:
との比較 std::function とは異なり、std::shared_ptr は、定義された等価セマンティクス。 2 つのshared_ptr インスタンスは、両方とも空であるか、両方とも空ではなく同じオブジェクトを参照している場合、等しいとみなされます。
以上が`std::function`、`boost::function`、および `std::tr1::function` が等価比較できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。