我已经看到std :: function的operator ==误用了不止一次,我不得不解释它的实际用途.
为了清楚有利于未来的读者,
here是文档.
上面提到的文档说它:
Compares a std::function with a null pointer. Empty functions (that is, functions without a callable target) compare equal, non-empty functions compare non-equal.
也就是说,std :: function还有操作符bool()(here是文档),其行为几乎相同,可用于代替比较my_func == nullptr.
特别是据说它:
Checks whether *this stores a callable function target, i.e. is not empty.
我无法看到一个可以使用而另一个不适合的情况,所以我无法理解运算符==的目的是什么,除了它在大多数时候可能被误解和误用的事实.
是否存在不能使用的特定情况?
它们是否可以互换,因为它们实际上是同一个东西,或者有两个不同的操作符是否合理?
最佳答案 目的很简单:
模拟普通函数指针的接口以及合理可能.
不可否认,我认为他们有点过分……即使是在模板中使用.
仅允许与nullptr进行比较的基本原理反映了original reason完全离开比较:
IIIb. Lack of comparison operators
The comparison operators ==, !=, <, >, <=, and >= are not supported by the function object wrapper.
Rationale: (in)equality and ordering relations cannot be sensibly defined for function objects.
原因很简单:包装的目标可能不支持比较,可能包装不同,或者其他什么.
如果你确定运算符包装的目标是什么,有一种方法可以得到原始参数:
但是你需要有非常熟悉的知识才能使用它.